Skip to content

Commit 9204940

Browse files
committed
C++: Add test cases for std::string methods.
1 parent 789e781 commit 9204940

File tree

4 files changed

+295
-0
lines changed

4 files changed

+295
-0
lines changed

cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,140 @@
494494
| string.cpp:183:3:183:5 | ref arg s10 | string.cpp:184:8:184:10 | s10 | |
495495
| string.cpp:183:17:183:17 | c | string.cpp:183:3:183:5 | ref arg s10 | TAINT |
496496
| string.cpp:183:17:183:17 | c | string.cpp:183:7:183:12 | call to append | TAINT |
497+
| string.cpp:189:17:189:23 | hello | string.cpp:189:17:189:24 | call to basic_string | TAINT |
498+
| string.cpp:189:17:189:24 | call to basic_string | string.cpp:195:17:195:18 | s1 | |
499+
| string.cpp:189:17:189:24 | call to basic_string | string.cpp:204:17:204:18 | s1 | |
500+
| string.cpp:190:17:190:22 | call to source | string.cpp:190:17:190:25 | call to basic_string | TAINT |
501+
| string.cpp:190:17:190:25 | call to basic_string | string.cpp:198:17:198:18 | s2 | |
502+
| string.cpp:191:11:191:25 | call to source | string.cpp:201:21:201:21 | c | |
503+
| string.cpp:192:14:192:15 | call to basic_string | string.cpp:195:7:195:8 | s3 | |
504+
| string.cpp:192:14:192:15 | call to basic_string | string.cpp:196:7:196:8 | s3 | |
505+
| string.cpp:192:18:192:19 | call to basic_string | string.cpp:198:7:198:8 | s4 | |
506+
| string.cpp:192:18:192:19 | call to basic_string | string.cpp:199:7:199:8 | s4 | |
507+
| string.cpp:192:22:192:23 | call to basic_string | string.cpp:201:7:201:8 | s5 | |
508+
| string.cpp:192:22:192:23 | call to basic_string | string.cpp:202:7:202:8 | s5 | |
509+
| string.cpp:193:17:193:22 | call to source | string.cpp:193:17:193:25 | call to basic_string | TAINT |
510+
| string.cpp:193:17:193:25 | call to basic_string | string.cpp:204:7:204:8 | s6 | |
511+
| string.cpp:193:17:193:25 | call to basic_string | string.cpp:205:7:205:8 | s6 | |
512+
| string.cpp:195:7:195:8 | ref arg s3 | string.cpp:196:7:196:8 | s3 | |
513+
| string.cpp:198:7:198:8 | ref arg s4 | string.cpp:199:7:199:8 | s4 | |
514+
| string.cpp:201:7:201:8 | ref arg s5 | string.cpp:202:7:202:8 | s5 | |
515+
| string.cpp:204:7:204:8 | ref arg s6 | string.cpp:205:7:205:8 | s6 | |
516+
| string.cpp:209:17:209:23 | hello | string.cpp:209:17:209:24 | call to basic_string | TAINT |
517+
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:214:7:214:8 | s1 | |
518+
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:215:20:215:21 | s1 | |
519+
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:219:20:219:21 | s1 | |
520+
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:222:7:222:8 | s1 | |
521+
| string.cpp:209:17:209:24 | call to basic_string | string.cpp:226:7:226:8 | s1 | |
522+
| string.cpp:210:17:210:22 | call to source | string.cpp:210:17:210:25 | call to basic_string | TAINT |
523+
| string.cpp:210:17:210:25 | call to basic_string | string.cpp:218:7:218:8 | s2 | |
524+
| string.cpp:210:17:210:25 | call to basic_string | string.cpp:223:20:223:21 | s2 | |
525+
| string.cpp:211:11:211:25 | call to source | string.cpp:227:24:227:24 | c | |
526+
| string.cpp:214:7:214:8 | s1 | string.cpp:214:2:214:8 | ... = ... | |
527+
| string.cpp:214:7:214:8 | s1 | string.cpp:215:7:215:8 | s3 | |
528+
| string.cpp:214:7:214:8 | s1 | string.cpp:216:7:216:8 | s3 | |
529+
| string.cpp:215:7:215:8 | ref arg s3 | string.cpp:216:7:216:8 | s3 | |
530+
| string.cpp:218:7:218:8 | s2 | string.cpp:218:2:218:8 | ... = ... | |
531+
| string.cpp:218:7:218:8 | s2 | string.cpp:219:7:219:8 | s4 | |
532+
| string.cpp:218:7:218:8 | s2 | string.cpp:220:7:220:8 | s4 | |
533+
| string.cpp:219:7:219:8 | ref arg s4 | string.cpp:220:7:220:8 | s4 | |
534+
| string.cpp:222:7:222:8 | s1 | string.cpp:222:2:222:8 | ... = ... | |
535+
| string.cpp:222:7:222:8 | s1 | string.cpp:223:7:223:8 | s5 | |
536+
| string.cpp:222:7:222:8 | s1 | string.cpp:224:7:224:8 | s5 | |
537+
| string.cpp:223:7:223:8 | ref arg s5 | string.cpp:224:7:224:8 | s5 | |
538+
| string.cpp:226:7:226:8 | s1 | string.cpp:226:2:226:8 | ... = ... | |
539+
| string.cpp:226:7:226:8 | s1 | string.cpp:227:7:227:8 | s6 | |
540+
| string.cpp:226:7:226:8 | s1 | string.cpp:228:7:228:8 | s6 | |
541+
| string.cpp:227:7:227:8 | ref arg s6 | string.cpp:228:7:228:8 | s6 | |
542+
| string.cpp:232:17:232:23 | hello | string.cpp:232:17:232:24 | call to basic_string | TAINT |
543+
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:237:7:237:8 | s1 | |
544+
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:238:24:238:25 | s1 | |
545+
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:242:24:242:25 | s1 | |
546+
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:245:7:245:8 | s1 | |
547+
| string.cpp:232:17:232:24 | call to basic_string | string.cpp:249:7:249:8 | s1 | |
548+
| string.cpp:233:17:233:22 | call to source | string.cpp:233:17:233:25 | call to basic_string | TAINT |
549+
| string.cpp:233:17:233:25 | call to basic_string | string.cpp:241:7:241:8 | s2 | |
550+
| string.cpp:233:17:233:25 | call to basic_string | string.cpp:246:24:246:25 | s2 | |
551+
| string.cpp:234:11:234:25 | call to source | string.cpp:250:28:250:28 | c | |
552+
| string.cpp:237:7:237:8 | s1 | string.cpp:237:2:237:8 | ... = ... | |
553+
| string.cpp:237:7:237:8 | s1 | string.cpp:238:7:238:8 | s3 | |
554+
| string.cpp:237:7:237:8 | s1 | string.cpp:239:7:239:8 | s3 | |
555+
| string.cpp:238:7:238:8 | ref arg s3 | string.cpp:239:7:239:8 | s3 | |
556+
| string.cpp:241:7:241:8 | s2 | string.cpp:241:2:241:8 | ... = ... | |
557+
| string.cpp:241:7:241:8 | s2 | string.cpp:242:7:242:8 | s4 | |
558+
| string.cpp:241:7:241:8 | s2 | string.cpp:243:7:243:8 | s4 | |
559+
| string.cpp:242:7:242:8 | ref arg s4 | string.cpp:243:7:243:8 | s4 | |
560+
| string.cpp:245:7:245:8 | s1 | string.cpp:245:2:245:8 | ... = ... | |
561+
| string.cpp:245:7:245:8 | s1 | string.cpp:246:7:246:8 | s5 | |
562+
| string.cpp:245:7:245:8 | s1 | string.cpp:247:7:247:8 | s5 | |
563+
| string.cpp:246:7:246:8 | ref arg s5 | string.cpp:247:7:247:8 | s5 | |
564+
| string.cpp:249:7:249:8 | s1 | string.cpp:249:2:249:8 | ... = ... | |
565+
| string.cpp:249:7:249:8 | s1 | string.cpp:250:7:250:8 | s6 | |
566+
| string.cpp:249:7:249:8 | s1 | string.cpp:251:7:251:8 | s6 | |
567+
| string.cpp:250:7:250:8 | ref arg s6 | string.cpp:251:7:251:8 | s6 | |
568+
| string.cpp:255:17:255:20 | {...} | string.cpp:260:10:260:11 | b1 | |
569+
| string.cpp:255:17:255:20 | {...} | string.cpp:261:7:261:8 | b1 | |
570+
| string.cpp:255:19:255:19 | 0 | string.cpp:255:17:255:20 | {...} | TAINT |
571+
| string.cpp:256:17:256:20 | {...} | string.cpp:263:10:263:11 | b2 | |
572+
| string.cpp:256:17:256:20 | {...} | string.cpp:264:7:264:8 | b2 | |
573+
| string.cpp:256:19:256:19 | 0 | string.cpp:256:17:256:20 | {...} | TAINT |
574+
| string.cpp:257:17:257:23 | hello | string.cpp:257:17:257:24 | call to basic_string | TAINT |
575+
| string.cpp:257:17:257:24 | call to basic_string | string.cpp:260:2:260:3 | s1 | |
576+
| string.cpp:257:17:257:24 | call to basic_string | string.cpp:260:14:260:15 | s1 | |
577+
| string.cpp:257:17:257:24 | call to basic_string | string.cpp:263:14:263:15 | s1 | |
578+
| string.cpp:258:17:258:22 | call to source | string.cpp:258:17:258:25 | call to basic_string | TAINT |
579+
| string.cpp:258:17:258:25 | call to basic_string | string.cpp:263:2:263:3 | s2 | |
580+
| string.cpp:260:10:260:11 | ref arg b1 | string.cpp:261:7:261:8 | b1 | |
581+
| string.cpp:263:10:263:11 | ref arg b2 | string.cpp:264:7:264:8 | b2 | |
582+
| string.cpp:268:17:268:23 | hello | string.cpp:268:17:268:24 | call to basic_string | TAINT |
583+
| string.cpp:268:17:268:24 | call to basic_string | string.cpp:273:7:273:8 | s1 | |
584+
| string.cpp:268:17:268:24 | call to basic_string | string.cpp:278:2:278:3 | s1 | |
585+
| string.cpp:268:17:268:24 | call to basic_string | string.cpp:281:7:281:8 | s1 | |
586+
| string.cpp:269:17:269:22 | call to source | string.cpp:269:17:269:25 | call to basic_string | TAINT |
587+
| string.cpp:269:17:269:25 | call to basic_string | string.cpp:274:7:274:8 | s2 | |
588+
| string.cpp:269:17:269:25 | call to basic_string | string.cpp:278:10:278:11 | s2 | |
589+
| string.cpp:269:17:269:25 | call to basic_string | string.cpp:282:7:282:8 | s2 | |
590+
| string.cpp:270:17:270:23 | world | string.cpp:270:17:270:24 | call to basic_string | TAINT |
591+
| string.cpp:270:17:270:24 | call to basic_string | string.cpp:275:7:275:8 | s3 | |
592+
| string.cpp:270:17:270:24 | call to basic_string | string.cpp:279:10:279:11 | s3 | |
593+
| string.cpp:270:17:270:24 | call to basic_string | string.cpp:283:7:283:8 | s3 | |
594+
| string.cpp:271:17:271:22 | call to source | string.cpp:271:17:271:25 | call to basic_string | TAINT |
595+
| string.cpp:271:17:271:25 | call to basic_string | string.cpp:276:7:276:8 | s4 | |
596+
| string.cpp:271:17:271:25 | call to basic_string | string.cpp:279:2:279:3 | s4 | |
597+
| string.cpp:271:17:271:25 | call to basic_string | string.cpp:284:7:284:8 | s4 | |
598+
| string.cpp:278:2:278:3 | ref arg s1 | string.cpp:281:7:281:8 | s1 | |
599+
| string.cpp:278:10:278:11 | ref arg s2 | string.cpp:282:7:282:8 | s2 | |
600+
| string.cpp:279:2:279:3 | ref arg s4 | string.cpp:284:7:284:8 | s4 | |
601+
| string.cpp:279:10:279:11 | ref arg s3 | string.cpp:283:7:283:8 | s3 | |
602+
| string.cpp:288:17:288:22 | call to source | string.cpp:288:17:288:25 | call to basic_string | TAINT |
603+
| string.cpp:288:17:288:25 | call to basic_string | string.cpp:292:7:292:8 | s1 | |
604+
| string.cpp:288:17:288:25 | call to basic_string | string.cpp:296:2:296:3 | s1 | |
605+
| string.cpp:288:17:288:25 | call to basic_string | string.cpp:300:7:300:8 | s1 | |
606+
| string.cpp:289:17:289:22 | call to source | string.cpp:289:17:289:25 | call to basic_string | TAINT |
607+
| string.cpp:289:17:289:25 | call to basic_string | string.cpp:293:7:293:8 | s2 | |
608+
| string.cpp:290:17:290:22 | call to source | string.cpp:290:17:290:25 | call to basic_string | TAINT |
609+
| string.cpp:290:17:290:25 | call to basic_string | string.cpp:294:7:294:8 | s3 | |
610+
| string.cpp:290:17:290:25 | call to basic_string | string.cpp:298:7:298:8 | s3 | |
611+
| string.cpp:296:2:296:3 | ref arg s1 | string.cpp:300:7:300:8 | s1 | |
612+
| string.cpp:297:7:297:8 | | string.cpp:297:7:297:8 | call to basic_string | TAINT |
613+
| string.cpp:297:7:297:8 | call to basic_string | string.cpp:297:2:297:8 | ... = ... | |
614+
| string.cpp:297:7:297:8 | call to basic_string | string.cpp:301:7:301:8 | s2 | |
615+
| string.cpp:298:7:298:8 | s3 | string.cpp:298:2:298:8 | ... = ... | |
616+
| string.cpp:298:7:298:8 | s3 | string.cpp:302:7:302:8 | s3 | |
617+
| string.cpp:307:16:307:20 | 123 | string.cpp:307:16:307:21 | call to basic_string | TAINT |
618+
| string.cpp:307:16:307:21 | call to basic_string | string.cpp:310:7:310:7 | a | |
619+
| string.cpp:307:16:307:21 | call to basic_string | string.cpp:312:7:312:7 | a | |
620+
| string.cpp:308:16:308:21 | call to source | string.cpp:308:16:308:24 | call to basic_string | TAINT |
621+
| string.cpp:308:16:308:24 | call to basic_string | string.cpp:311:7:311:7 | b | |
622+
| string.cpp:308:16:308:24 | call to basic_string | string.cpp:313:7:313:7 | b | |
623+
| string.cpp:310:7:310:7 | ref arg a | string.cpp:312:7:312:7 | a | |
624+
| string.cpp:311:7:311:7 | ref arg b | string.cpp:313:7:313:7 | b | |
625+
| string.cpp:318:16:318:20 | 123 | string.cpp:318:16:318:21 | call to basic_string | TAINT |
626+
| string.cpp:318:16:318:21 | call to basic_string | string.cpp:321:7:321:7 | a | |
627+
| string.cpp:318:16:318:21 | call to basic_string | string.cpp:321:19:321:19 | a | |
628+
| string.cpp:319:16:319:21 | call to source | string.cpp:319:16:319:24 | call to basic_string | TAINT |
629+
| string.cpp:319:16:319:24 | call to basic_string | string.cpp:322:7:322:7 | b | |
630+
| string.cpp:319:16:319:24 | call to basic_string | string.cpp:322:19:322:19 | b | |
497631
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:16:2:16:4 | ss1 | |
498632
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:22:7:22:9 | ss1 | |
499633
| stringstream.cpp:13:20:13:22 | call to basic_stringstream | stringstream.cpp:27:7:27:9 | ss1 | |

cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,140 @@ void test_string_append() {
184184
sink(s10); // tainted
185185
}
186186
}
187+
188+
void test_string_assign() {
189+
std::string s1("hello");
190+
std::string s2(source());
191+
char c = ns_char::source();
192+
std::string s3, s4, s5;
193+
std::string s6(source());
194+
195+
sink(s3.assign(s1));
196+
sink(s3);
197+
198+
sink(s4.assign(s2)); // tainted [NOT DETECTED]
199+
sink(s4); // tainted [NOT DETECTED]
200+
201+
sink(s5.assign(10, c)); // tainted [NOT DETECTED]
202+
sink(s5); // tainted [NOT DETECTED]
203+
204+
sink(s6.assign(s1));
205+
sink(s6); // [FALSE POSITIVE]
206+
}
207+
208+
void test_string_insert() {
209+
std::string s1("hello");
210+
std::string s2(source());
211+
char c = ns_char::source();
212+
std::string s3, s4, s5, s6;
213+
214+
s3 = s1;
215+
sink(s3.insert(0, s1));
216+
sink(s3);
217+
218+
s4 = s2;
219+
sink(s4.insert(0, s1)); // tainted [NOT DETECTED]
220+
sink(s4); // tainted
221+
222+
s5 = s1;
223+
sink(s5.insert(0, s2)); // tainted [NOT DETECTED]
224+
sink(s5); // tainted [NOT DETECTED]
225+
226+
s6 = s1;
227+
sink(s6.insert(0, 10, c)); // tainted [NOT DETECTED]
228+
sink(s6); // tainted [NOT DETECTED]
229+
}
230+
231+
void test_string_replace() {
232+
std::string s1("hello");
233+
std::string s2(source());
234+
char c = ns_char::source();
235+
std::string s3, s4, s5, s6;
236+
237+
s3 = s1;
238+
sink(s3.replace(1, 2, s1));
239+
sink(s3);
240+
241+
s4 = s2;
242+
sink(s4.replace(1, 2, s1)); // tainted [NOT DETECTED]
243+
sink(s4); // tainted
244+
245+
s5 = s1;
246+
sink(s5.replace(1, 2, s2)); // tainted [NOT DETECTED]
247+
sink(s5); // tainted [NOT DETECTED]
248+
249+
s6 = s1;
250+
sink(s6.replace(1, 2, 10, c)); // tainted [NOT DETECTED]
251+
sink(s6); // tainted [NOT DETECTED]
252+
}
253+
254+
void test_string_copy() {
255+
char b1[1024] = {0};
256+
char b2[1024] = {0};
257+
std::string s1("hello");
258+
std::string s2(source());
259+
260+
s1.copy(b1, s1.length(), 0);
261+
sink(b1);
262+
263+
s2.copy(b2, s1.length(), 0);
264+
sink(b2); // tainted [NOT DETECTED]
265+
}
266+
267+
void test_string_swap() {
268+
std::string s1("hello");
269+
std::string s2(source());
270+
std::string s3("world");
271+
std::string s4(source());
272+
273+
sink(s1);
274+
sink(s2); // tainted
275+
sink(s3);
276+
sink(s4); // tainted
277+
278+
s1.swap(s2);
279+
s4.swap(s3);
280+
281+
sink(s1); // tainted [NOT DETECTED]
282+
sink(s2); // [FALSE POSITIVE]
283+
sink(s3); // tainted [NOT DETECTED]
284+
sink(s4); // [FALSE POSITIVE]
285+
}
286+
287+
void test_string_clear() {
288+
std::string s1(source());
289+
std::string s2(source());
290+
std::string s3(source());
291+
292+
sink(s1); // tainted
293+
sink(s2); // tainted
294+
sink(s3); // tainted
295+
296+
s1.clear();
297+
s2 = "";
298+
s3 = s3;
299+
300+
sink(s1); // [FALSE POSITIVE]
301+
sink(s2);
302+
sink(s3); // tainted
303+
}
304+
305+
void test_string_data()
306+
{
307+
std::string a("123");
308+
std::string b(source());
309+
310+
sink(a.data());
311+
sink(b.data()); // tainted // [FALSE POSITIVE]
312+
sink(a.length());
313+
sink(b.length());
314+
}
315+
316+
void test_string_substr()
317+
{
318+
std::string a("123");
319+
std::string b(source());
320+
321+
sink(a.substr(0, a.length()));
322+
sink(b.substr(0, b.length())); // tainted // [FALSE POSITIVE]
323+
}

cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@
6060
| string.cpp:171:8:171:9 | s8 | string.cpp:154:18:154:23 | call to source |
6161
| string.cpp:176:8:176:9 | s9 | string.cpp:174:13:174:18 | call to source |
6262
| string.cpp:184:8:184:10 | s10 | string.cpp:181:12:181:26 | call to source |
63+
| string.cpp:205:7:205:8 | s6 | string.cpp:193:17:193:22 | call to source |
64+
| string.cpp:220:7:220:8 | s4 | string.cpp:210:17:210:22 | call to source |
65+
| string.cpp:243:7:243:8 | s4 | string.cpp:233:17:233:22 | call to source |
66+
| string.cpp:274:7:274:8 | s2 | string.cpp:269:17:269:22 | call to source |
67+
| string.cpp:276:7:276:8 | s4 | string.cpp:271:17:271:22 | call to source |
68+
| string.cpp:282:7:282:8 | s2 | string.cpp:269:17:269:22 | call to source |
69+
| string.cpp:284:7:284:8 | s4 | string.cpp:271:17:271:22 | call to source |
70+
| string.cpp:292:7:292:8 | s1 | string.cpp:288:17:288:22 | call to source |
71+
| string.cpp:293:7:293:8 | s2 | string.cpp:289:17:289:22 | call to source |
72+
| string.cpp:294:7:294:8 | s3 | string.cpp:290:17:290:22 | call to source |
73+
| string.cpp:300:7:300:8 | s1 | string.cpp:288:17:288:22 | call to source |
74+
| string.cpp:302:7:302:8 | s3 | string.cpp:290:17:290:22 | call to source |
6375
| structlikeclass.cpp:35:8:35:9 | s1 | structlikeclass.cpp:29:22:29:27 | call to source |
6476
| structlikeclass.cpp:36:8:36:9 | s2 | structlikeclass.cpp:30:24:30:29 | call to source |
6577
| structlikeclass.cpp:37:8:37:9 | s3 | structlikeclass.cpp:29:22:29:27 | call to source |

cpp/ql/test/library-tests/dataflow/taint-tests/test_diff.expected

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@
5757
| string.cpp:171:8:171:9 | string.cpp:154:18:154:23 | AST only |
5858
| string.cpp:176:8:176:9 | string.cpp:174:13:174:18 | AST only |
5959
| string.cpp:184:8:184:10 | string.cpp:181:12:181:26 | AST only |
60+
| string.cpp:205:7:205:8 | string.cpp:193:17:193:22 | AST only |
61+
| string.cpp:220:7:220:8 | string.cpp:210:17:210:22 | AST only |
62+
| string.cpp:243:7:243:8 | string.cpp:233:17:233:22 | AST only |
63+
| string.cpp:274:7:274:8 | string.cpp:269:17:269:22 | AST only |
64+
| string.cpp:276:7:276:8 | string.cpp:271:17:271:22 | AST only |
65+
| string.cpp:282:7:282:8 | string.cpp:269:17:269:22 | AST only |
66+
| string.cpp:284:7:284:8 | string.cpp:271:17:271:22 | AST only |
67+
| string.cpp:292:7:292:8 | string.cpp:288:17:288:22 | AST only |
68+
| string.cpp:293:7:293:8 | string.cpp:289:17:289:22 | AST only |
69+
| string.cpp:294:7:294:8 | string.cpp:290:17:290:22 | AST only |
70+
| string.cpp:300:7:300:8 | string.cpp:288:17:288:22 | AST only |
71+
| string.cpp:302:7:302:8 | string.cpp:290:17:290:22 | AST only |
6072
| structlikeclass.cpp:35:8:35:9 | structlikeclass.cpp:29:22:29:27 | AST only |
6173
| structlikeclass.cpp:36:8:36:9 | structlikeclass.cpp:30:24:30:29 | AST only |
6274
| structlikeclass.cpp:37:8:37:9 | structlikeclass.cpp:29:22:29:27 | AST only |

0 commit comments

Comments
 (0)