189a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-signed-char-misuse %t \ 289a1d03eSRichard // RUN: -config='{CheckOptions: \ 3*e8a3ddafSNathan James // RUN: {bugprone-signed-char-misuse.CharTypdefsToIgnore: "sal_Int8;int8_t"}}' \ 489a1d03eSRichard // RUN: -- 589a1d03eSRichard 689a1d03eSRichard /////////////////////////////////////////////////////////////////// 789a1d03eSRichard /// Test cases correctly caught by the check. 889a1d03eSRichard 989a1d03eSRichard // Check that a simple test case is still caught. SimpleAssignment()1089a1d03eSRichardint SimpleAssignment() { 1189a1d03eSRichard signed char CCharacter = -5; 1289a1d03eSRichard int NCharacter; 1389a1d03eSRichard NCharacter = CCharacter; 1489a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:16: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 1589a1d03eSRichard 1689a1d03eSRichard return NCharacter; 1789a1d03eSRichard } 1889a1d03eSRichard 1989a1d03eSRichard typedef signed char sal_Char; 2089a1d03eSRichard TypedefNotInIgnorableList()2189a1d03eSRichardint TypedefNotInIgnorableList() { 2289a1d03eSRichard sal_Char CCharacter = 'a'; 2389a1d03eSRichard int NCharacter = CCharacter; 2489a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:20: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 2589a1d03eSRichard 2689a1d03eSRichard return NCharacter; 2789a1d03eSRichard } 2889a1d03eSRichard 2989a1d03eSRichard /////////////////////////////////////////////////////////////////// 3089a1d03eSRichard /// Test cases correctly ignored by the check. 3189a1d03eSRichard 3289a1d03eSRichard typedef signed char sal_Int8; 3389a1d03eSRichard OneIgnorableTypedef()3489a1d03eSRichardint OneIgnorableTypedef() { 3589a1d03eSRichard sal_Int8 CCharacter = 'a'; 3689a1d03eSRichard int NCharacter = CCharacter; 3789a1d03eSRichard 3889a1d03eSRichard return NCharacter; 3989a1d03eSRichard } 4089a1d03eSRichard 4189a1d03eSRichard typedef signed char int8_t; 4289a1d03eSRichard OtherIgnorableTypedef()4389a1d03eSRichardint OtherIgnorableTypedef() { 4489a1d03eSRichard int8_t CCharacter = 'a'; 4589a1d03eSRichard int NCharacter = CCharacter; 4689a1d03eSRichard 4789a1d03eSRichard return NCharacter; 4889a1d03eSRichard } 4989a1d03eSRichard 5089a1d03eSRichard /////////////////////////////////////////////////////////////////// 5189a1d03eSRichard /// Test cases which should be caught by the check. 5289a1d03eSRichard 5389a1d03eSRichard namespace boost { 5489a1d03eSRichard 5589a1d03eSRichard template <class T> 5689a1d03eSRichard class optional { 5789a1d03eSRichard T *member; 5889a1d03eSRichard 5989a1d03eSRichard public: optional(T value)6089a1d03eSRichard optional(T value) { 6189a1d03eSRichard member = new T(value); 6289a1d03eSRichard } 6389a1d03eSRichard operator *()6489a1d03eSRichard T operator*() { return *member; } 6589a1d03eSRichard }; 6689a1d03eSRichard 6789a1d03eSRichard } // namespace boost 6889a1d03eSRichard DereferenceWithTypdef(boost::optional<sal_Int8> param)6989a1d03eSRichardint DereferenceWithTypdef(boost::optional<sal_Int8> param) { 7089a1d03eSRichard int NCharacter = *param; 7189a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:20: warning: 'signed char' to 'int' conversion; consider casting to 'unsigned char' first. [bugprone-signed-char-misuse] 7289a1d03eSRichard 7389a1d03eSRichard return NCharacter; 7489a1d03eSRichard } 75