@@ -31,10 +31,12 @@ void origin_ostream(std::ostream &os) {
3131 unsigned char unsigned_value = 9 ;
3232 os << unsigned_value;
3333 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
34+ // CHECK-FIXES: os << static_cast<unsigned int>(unsigned_value);
3435
3536 signed char signed_value = 9 ;
3637 os << signed_value;
3738 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'signed char' passed to 'operator<<' outputs as character instead of integer
39+ // CHECK-FIXES: os << static_cast<int>(signed_value);
3840
3941 char char_value = 9 ;
4042 os << char_value;
@@ -44,10 +46,12 @@ void based_on_ostream(A &os) {
4446 unsigned char unsigned_value = 9 ;
4547 os << unsigned_value;
4648 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
49+ // CHECK-FIXES: os << static_cast<unsigned int>(unsigned_value);
4750
4851 signed char signed_value = 9 ;
4952 os << signed_value;
5053 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'signed char' passed to 'operator<<' outputs as character instead of integer
54+ // CHECK-FIXES: os << static_cast<int>(signed_value);
5155
5256 char char_value = 9 ;
5357 os << char_value;
@@ -69,17 +73,20 @@ void template_based_on_ostream(B<int> &os) {
6973 unsigned char unsigned_value = 9 ;
7074 os << unsigned_value;
7175 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
76+ // CHECK-FIXES: os << static_cast<unsigned int>(unsigned_value);
7277}
7378
7479template <class T > void template_fn_1 (T &os) {
7580 unsigned char unsigned_value = 9 ;
7681 os << unsigned_value;
7782 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
83+ // CHECK-FIXES: os << static_cast<unsigned int>(unsigned_value);
7884}
7985template <class T > void template_fn_2 (std::ostream &os) {
8086 T unsigned_value = 9 ;
8187 os << unsigned_value;
8288 // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
89+ // CHECK-FIXES: os << static_cast<unsigned int>(unsigned_value);
8390}
8491template <class T > void template_fn_3 (std::ostream &os) {
8592 T unsigned_value = 9 ;
@@ -91,3 +98,34 @@ void call_template_fn() {
9198 template_fn_2<unsigned char >(a);
9299 template_fn_3<char >(a);
93100}
101+
102+ using U8 = unsigned char ;
103+ void alias_unsigned_char (std::ostream &os) {
104+ U8 v = 9 ;
105+ os << v;
106+ // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'U8' (aka 'unsigned char') passed to 'operator<<' outputs as character instead of integer
107+ // CHECK-FIXES: os << static_cast<unsigned int>(v);
108+ }
109+
110+ using I8 = signed char ;
111+ void alias_signed_char (std::ostream &os) {
112+ I8 v = 9 ;
113+ os << v;
114+ // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'I8' (aka 'signed char') passed to 'operator<<' outputs as character instead of integer
115+ // CHECK-FIXES: os << static_cast<int>(v);
116+ }
117+
118+ using C8 = char ;
119+ void alias_char (std::ostream &os) {
120+ C8 v = 9 ;
121+ os << v;
122+ }
123+
124+
125+ #define MACRO_VARIANT_NAME a
126+ void macro_variant_name (std::ostream &os) {
127+ unsigned char MACRO_VARIANT_NAME = 9 ;
128+ os << MACRO_VARIANT_NAME;
129+ // CHECK-MESSAGES: [[@LINE-1]]:6: warning: 'unsigned char' passed to 'operator<<' outputs as character instead of integer
130+ // CHECK-FIXES: os << static_cast<unsigned int>(MACRO_VARIANT_NAME);
131+ }
0 commit comments