@@ -60,6 +60,14 @@ class TestCharVar : public TestFixture {
60
60
" }" );
61
61
ASSERT_EQUALS (" " , errout_str ());
62
62
63
+ check (" int buf[256];\n "
64
+ " void foo()\n "
65
+ " {\n "
66
+ " signed char ch = 0x80;\n "
67
+ " buf[ch] = 0;\n "
68
+ " }" );
69
+ ASSERT_EQUALS (" [test.cpp:5:5]: (warning) Signed 'char' type used as array index. [signedCharArrayIndex]\n " , errout_str ());
70
+
63
71
check (" int buf[256];\n "
64
72
" void foo()\n "
65
73
" {\n "
@@ -71,7 +79,7 @@ class TestCharVar : public TestFixture {
71
79
check (" int buf[256];\n "
72
80
" void foo()\n "
73
81
" {\n "
74
- " char ch = 0;\n "
82
+ " unsigned char ch = 0;\n "
75
83
" buf[ch] = 0;\n "
76
84
" }" );
77
85
ASSERT_EQUALS (" " , errout_str ());
@@ -87,10 +95,17 @@ class TestCharVar : public TestFixture {
87
95
check (" int buf[256];\n "
88
96
" void foo()\n "
89
97
" {\n "
90
- " char ch = 0x80 ;\n "
98
+ " char ch = 0 ;\n "
91
99
" buf[ch] = 0;\n "
92
100
" }" );
93
- ASSERT_EQUALS (" [test.cpp:5:5]: (portability) 'char' type used as array index. [unknownSignCharArrayIndex]\n " , errout_str ());
101
+ ASSERT_EQUALS (" " , errout_str ());
102
+
103
+ check (" int buf[256];\n "
104
+ " void foo(unsigned char ch)\n "
105
+ " {\n "
106
+ " buf[ch] = 0;\n "
107
+ " }" );
108
+ ASSERT_EQUALS (" " , errout_str ());
94
109
95
110
check (" int buf[256];\n "
96
111
" void foo(signed char ch)\n "
@@ -106,13 +121,41 @@ class TestCharVar : public TestFixture {
106
121
" }" );
107
122
ASSERT_EQUALS (" " , errout_str ());
108
123
124
+ check (" void foo(char* buf)\n "
125
+ " {\n "
126
+ " unsigned char ch = 0x80;"
127
+ " buf[ch] = 0;\n "
128
+ " }" );
129
+ ASSERT_EQUALS (" " , errout_str ());
130
+
131
+ check (" void foo(char* buf)\n "
132
+ " {\n "
133
+ " signed char ch = 0x80;"
134
+ " buf[ch] = 0;\n "
135
+ " }" );
136
+ ASSERT_EQUALS (" [test.cpp:3:31]: (warning) Signed 'char' type used as array index. [signedCharArrayIndex]\n " , errout_str ());
137
+
109
138
check (" void foo(char* buf)\n "
110
139
" {\n "
111
140
" char ch = 0x80;"
112
141
" buf[ch] = 0;\n "
113
142
" }" );
114
143
ASSERT_EQUALS (" [test.cpp:3:24]: (portability) 'char' type used as array index. [unknownSignCharArrayIndex]\n " , errout_str ());
115
144
145
+ check (" void foo(char* buf)\n "
146
+ " {\n "
147
+ " unsigned char ch = 0;"
148
+ " buf[ch] = 0;\n "
149
+ " }" );
150
+ ASSERT_EQUALS (" " , errout_str ());
151
+
152
+ check (" void foo(char* buf)\n "
153
+ " {\n "
154
+ " signed char ch = 0;"
155
+ " buf[ch] = 0;\n "
156
+ " }" );
157
+ ASSERT_EQUALS (" " , errout_str ());
158
+
116
159
check (" void foo(char* buf)\n "
117
160
" {\n "
118
161
" char ch = 0;"
@@ -126,6 +169,18 @@ class TestCharVar : public TestFixture {
126
169
" }" );
127
170
ASSERT_EQUALS (" " , errout_str ());
128
171
172
+ check (" void foo(char* buf, unsigned char ch)\n "
173
+ " {\n "
174
+ " buf[ch] = 0;\n "
175
+ " }" );
176
+ ASSERT_EQUALS (" " , errout_str ());
177
+
178
+ check (" void foo(char* buf, signed char ch)\n "
179
+ " {\n "
180
+ " buf[ch] = 0;\n "
181
+ " }" );
182
+ ASSERT_EQUALS (" " , errout_str ());
183
+
129
184
check (" void foo(char* buf, char ch)\n "
130
185
" {\n "
131
186
" buf[ch] = 0;\n "
@@ -135,7 +190,7 @@ class TestCharVar : public TestFixture {
135
190
check (" int flags[256];\n "
136
191
" void foo(const char* str)\n "
137
192
" {\n "
138
- " flags[*str] = 0;\n "
193
+ " flags[(signed char) *str] = 0;\n "
139
194
" }" );
140
195
ASSERT_EQUALS (" " , errout_str ());
141
196
@@ -146,6 +201,13 @@ class TestCharVar : public TestFixture {
146
201
" }" );
147
202
ASSERT_EQUALS (" " , errout_str ());
148
203
204
+ check (" int flags[256];\n "
205
+ " void foo(const char* str)\n "
206
+ " {\n "
207
+ " flags[*str] = 0;\n "
208
+ " }" );
209
+ ASSERT_EQUALS (" " , errout_str ());
210
+
149
211
check (" void foo(const char str[])\n "
150
212
" {\n "
151
213
" map[str] = 0;\n "
0 commit comments