1 // RUN: %check_clang_tidy %s bugprone-signed-char-misuse %t \ 2 // RUN: -config='{CheckOptions: \ 3 // RUN: [{key: bugprone-signed-char-misuse.CharTypdefsToIgnore, value: "sal_Int8;int8_t"}]}' \ 4 // RUN: -- 5 6 /////////////////////////////////////////////////////////////////// 7 /// Test cases correctly caught by the check. 8 9 // Check that a simple test case is still caught. SimpleAssignment()10int SimpleAssignment() { 11 signed char CCharacter = -5; 12 int NCharacter; 13 NCharacter = CCharacter; 14 // CHECK-MESSAGES: [[@LINE-1]]:16: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 15 16 return NCharacter; 17 } 18 19 typedef signed char sal_Char; 20 TypedefNotInIgnorableList()21int TypedefNotInIgnorableList() { 22 sal_Char CCharacter = 'a'; 23 int NCharacter = CCharacter; 24 // CHECK-MESSAGES: [[@LINE-1]]:20: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 25 26 return NCharacter; 27 } 28 29 /////////////////////////////////////////////////////////////////// 30 /// Test cases correctly ignored by the check. 31 32 typedef signed char sal_Int8; 33 OneIgnorableTypedef()34int OneIgnorableTypedef() { 35 sal_Int8 CCharacter = 'a'; 36 int NCharacter = CCharacter; 37 38 return NCharacter; 39 } 40 41 typedef signed char int8_t; 42 OtherIgnorableTypedef()43int OtherIgnorableTypedef() { 44 int8_t CCharacter = 'a'; 45 int NCharacter = CCharacter; 46 47 return NCharacter; 48 } 49 50 /////////////////////////////////////////////////////////////////// 51 /// Test cases which should be caught by the check. 52 53 namespace boost { 54 55 template <class T> 56 class optional { 57 T *member; 58 59 public: optional(T value)60 optional(T value) { 61 member = new T(value); 62 } 63 operator *()64 T operator*() { return *member; } 65 }; 66 67 } // namespace boost 68 DereferenceWithTypdef(boost::optional<sal_Int8> param)69int DereferenceWithTypdef(boost::optional<sal_Int8> param) { 70 int NCharacter = *param; 71 // CHECK-MESSAGES: [[@LINE-1]]:20: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 72 73 return NCharacter; 74 } 75