Skip to content

Commit 5f74c24

Browse files
committed
C++: Test definitions through &, *, ...
1 parent 4ddf121 commit 5f74c24

File tree

6 files changed

+272
-2
lines changed

6 files changed

+272
-2
lines changed

cpp/ql/test/library-tests/dataflow/fields/by_reference.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,70 @@ void test_nonMemberSetA() {
6868
nonMemberSetA(&s, user_input());
6969
sink(nonMemberGetA(&s)); // flow
7070
}
71+
72+
////////////////////
73+
74+
struct Inner {
75+
void *a;
76+
};
77+
78+
struct Outer {
79+
Inner inner_nested, *inner_ptr;
80+
void *a;
81+
};
82+
83+
void taint_inner_a_ptr(Inner *inner) {
84+
inner->a = user_input();
85+
}
86+
87+
void taint_inner_a_ref(Inner &inner) {
88+
inner.a = user_input();
89+
}
90+
91+
void taint_a_ptr(void **pa) {
92+
*pa = user_input();
93+
}
94+
95+
void taint_a_ref(void *&pa) {
96+
pa = user_input();
97+
}
98+
99+
void test_outer_with_ptr(Outer *pouter) {
100+
Outer outer;
101+
102+
taint_inner_a_ptr(&outer.inner_nested);
103+
taint_inner_a_ptr(outer.inner_ptr);
104+
taint_a_ptr(&outer.a);
105+
106+
taint_inner_a_ptr(&pouter->inner_nested);
107+
taint_inner_a_ptr(pouter->inner_ptr);
108+
taint_a_ptr(&pouter->a);
109+
110+
sink(outer.inner_nested.a); // flow [NOT DETECTED by AST]
111+
sink(outer.inner_ptr->a); // flow [NOT DETECTED by IR]
112+
sink(outer.a); // flow [NOT DETECTED]
113+
114+
sink(pouter->inner_nested.a); // flow [NOT DETECTED by AST]
115+
sink(pouter->inner_ptr->a); // flow [NOT DETECTED by IR]
116+
sink(pouter->a); // flow [NOT DETECTED]
117+
}
118+
119+
void test_outer_with_ref(Outer *pouter) {
120+
Outer outer;
121+
122+
taint_inner_a_ref(outer.inner_nested);
123+
taint_inner_a_ref(*outer.inner_ptr);
124+
taint_a_ref(outer.a);
125+
126+
taint_inner_a_ref(pouter->inner_nested);
127+
taint_inner_a_ref(*pouter->inner_ptr);
128+
taint_a_ref(pouter->a);
129+
130+
sink(outer.inner_nested.a); // flow
131+
sink(outer.inner_ptr->a); // flow [NOT DETECTED]
132+
sink(outer.a); // flow [NOT DETECTED by IR]
133+
134+
sink(pouter->inner_nested.a); // flow
135+
sink(pouter->inner_ptr->a); // flow [NOT DETECTED]
136+
sink(pouter->a); // flow [NOT DETECTED by IR]
137+
}

cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,10 @@ argHasPostUpdate
6767
| by_reference.cpp:63:10:63:28 | call to getThroughNonMember | ArgumentNode is missing PostUpdateNode. |
6868
| by_reference.cpp:68:21:68:30 | call to user_input | ArgumentNode is missing PostUpdateNode. |
6969
| by_reference.cpp:69:8:69:20 | call to nonMemberGetA | ArgumentNode is missing PostUpdateNode. |
70+
| by_reference.cpp:123:21:123:36 | * ... | ArgumentNode is missing PostUpdateNode. |
71+
| by_reference.cpp:127:21:127:38 | * ... | ArgumentNode is missing PostUpdateNode. |
72+
| qualifiers.cpp:27:28:27:37 | call to user_input | ArgumentNode is missing PostUpdateNode. |
73+
| qualifiers.cpp:32:23:32:30 | call to getInner | ArgumentNode is missing PostUpdateNode. |
74+
| qualifiers.cpp:32:35:32:44 | call to user_input | ArgumentNode is missing PostUpdateNode. |
75+
| qualifiers.cpp:37:19:37:35 | * ... | ArgumentNode is missing PostUpdateNode. |
76+
| qualifiers.cpp:37:38:37:47 | call to user_input | ArgumentNode is missing PostUpdateNode. |

cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
uniqueEnclosingCallable
22
uniqueTypeBound
3+
| by_reference.cpp:106:21:106:41 | Chi | Node should have one type bound but has 2. |
4+
| by_reference.cpp:126:21:126:40 | Chi | Node should have one type bound but has 2. |
35
uniqueTypeRepr
46
uniqueNodeLocation
5-
| D.cpp:1:17:1:17 | o | Node should have one location but has 2. |
6-
| by_reference.cpp:1:17:1:17 | o | Node should have one location but has 2. |
7+
| D.cpp:1:17:1:17 | o | Node should have one location but has 3. |
8+
| by_reference.cpp:1:17:1:17 | o | Node should have one location but has 3. |
79
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
810
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
911
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
1012
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
13+
| qualifiers.cpp:1:17:1:17 | o | Node should have one location but has 3. |
1114
missingLocation
1215
| Nodes without location: 4 |
1316
uniqueNodeToString

cpp/ql/test/library-tests/dataflow/fields/flow.expected

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,42 @@ edges
167167
| by_reference.cpp:68:17:68:18 | ref arg & ... [a] | by_reference.cpp:69:22:69:23 | & ... [a] |
168168
| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | ref arg & ... [a] |
169169
| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA |
170+
| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] |
171+
| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] |
172+
| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] |
173+
| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... |
174+
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] |
175+
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] |
176+
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] |
177+
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] |
178+
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] |
179+
| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] |
180+
| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... |
181+
| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a |
182+
| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a |
183+
| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa |
184+
| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] |
185+
| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] |
186+
| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] |
187+
| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] |
188+
| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | by_reference.cpp:111:14:111:22 | inner_ptr [a] |
189+
| by_reference.cpp:111:14:111:22 | inner_ptr [a] | by_reference.cpp:111:25:111:25 | a |
190+
| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | by_reference.cpp:115:16:115:24 | inner_ptr [a] |
191+
| by_reference.cpp:115:16:115:24 | inner_ptr [a] | by_reference.cpp:115:27:115:27 | a |
192+
| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | outer [inner_nested, a] |
193+
| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] |
194+
| by_reference.cpp:124:15:124:19 | outer [post update] [a] | by_reference.cpp:132:8:132:12 | outer [a] |
195+
| by_reference.cpp:124:21:124:21 | ref arg a | by_reference.cpp:124:15:124:19 | outer [post update] [a] |
196+
| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] |
197+
| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] |
198+
| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | by_reference.cpp:136:8:136:13 | pouter [a] |
199+
| by_reference.cpp:128:23:128:23 | ref arg a | by_reference.cpp:128:15:128:20 | pouter [post update] [a] |
200+
| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | inner_nested [a] |
201+
| by_reference.cpp:130:14:130:25 | inner_nested [a] | by_reference.cpp:130:27:130:27 | a |
202+
| by_reference.cpp:132:8:132:12 | outer [a] | by_reference.cpp:132:14:132:14 | a |
203+
| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | inner_nested [a] |
204+
| by_reference.cpp:134:16:134:27 | inner_nested [a] | by_reference.cpp:134:29:134:29 | a |
205+
| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a |
170206
| complex.cpp:34:15:34:15 | b [f, a_] | complex.cpp:44:8:44:8 | b [f, a_] |
171207
| complex.cpp:34:15:34:15 | b [f, b_] | complex.cpp:45:8:45:8 | b [f, b_] |
172208
| complex.cpp:44:8:44:8 | b [f, a_] | complex.cpp:44:10:44:10 | f [a_] |
@@ -205,6 +241,17 @@ edges
205241
| constructors.cpp:43:9:43:9 | g [b_] | constructors.cpp:26:15:26:15 | f [b_] |
206242
| constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] |
207243
| constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] |
244+
| qualifiers.cpp:22:5:22:9 | outer [post update] [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] |
245+
| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] |
246+
| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | outer [post update] [inner, a] |
247+
| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... |
248+
| qualifiers.cpp:23:10:23:14 | outer [inner, a] | qualifiers.cpp:23:16:23:20 | inner [a] |
249+
| qualifiers.cpp:23:16:23:20 | inner [a] | qualifiers.cpp:23:23:23:23 | a |
250+
| qualifiers.cpp:27:5:27:9 | outer [post update] [inner, a] | qualifiers.cpp:28:10:28:14 | outer [inner, a] |
251+
| qualifiers.cpp:27:11:27:18 | call to getInner [post update] [a] | qualifiers.cpp:27:5:27:9 | outer [post update] [inner, a] |
252+
| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | call to getInner [post update] [a] |
253+
| qualifiers.cpp:28:10:28:14 | outer [inner, a] | qualifiers.cpp:28:16:28:20 | inner [a] |
254+
| qualifiers.cpp:28:16:28:20 | inner [a] | qualifiers.cpp:28:23:28:23 | a |
208255
| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] |
209256
| simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] |
210257
| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:28:12:28:12 | call to a |
@@ -448,6 +495,43 @@ nodes
448495
| by_reference.cpp:68:21:68:30 | call to user_input | semmle.label | call to user_input |
449496
| by_reference.cpp:69:8:69:20 | call to nonMemberGetA | semmle.label | call to nonMemberGetA |
450497
| by_reference.cpp:69:22:69:23 | & ... [a] | semmle.label | & ... [a] |
498+
| by_reference.cpp:84:3:84:7 | inner [post update] [a] | semmle.label | inner [post update] [a] |
499+
| by_reference.cpp:84:3:84:25 | ... = ... | semmle.label | ... = ... |
500+
| by_reference.cpp:84:14:84:23 | call to user_input | semmle.label | call to user_input |
501+
| by_reference.cpp:87:31:87:35 | inner [a] | semmle.label | inner [a] |
502+
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | semmle.label | inner [post update] [a] |
503+
| by_reference.cpp:88:3:88:24 | ... = ... | semmle.label | ... = ... |
504+
| by_reference.cpp:88:13:88:22 | call to user_input | semmle.label | call to user_input |
505+
| by_reference.cpp:95:25:95:26 | pa | semmle.label | pa |
506+
| by_reference.cpp:96:8:96:17 | call to user_input | semmle.label | call to user_input |
507+
| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | semmle.label | outer [post update] [inner_ptr, a] |
508+
| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | semmle.label | ref arg inner_ptr [a] |
509+
| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | semmle.label | pouter [post update] [inner_ptr, a] |
510+
| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | semmle.label | ref arg inner_ptr [a] |
511+
| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | semmle.label | outer [inner_ptr, a] |
512+
| by_reference.cpp:111:14:111:22 | inner_ptr [a] | semmle.label | inner_ptr [a] |
513+
| by_reference.cpp:111:25:111:25 | a | semmle.label | a |
514+
| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | semmle.label | pouter [inner_ptr, a] |
515+
| by_reference.cpp:115:16:115:24 | inner_ptr [a] | semmle.label | inner_ptr [a] |
516+
| by_reference.cpp:115:27:115:27 | a | semmle.label | a |
517+
| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | semmle.label | outer [post update] [inner_nested, a] |
518+
| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | semmle.label | ref arg inner_nested [a] |
519+
| by_reference.cpp:124:15:124:19 | outer [post update] [a] | semmle.label | outer [post update] [a] |
520+
| by_reference.cpp:124:21:124:21 | ref arg a | semmle.label | ref arg a |
521+
| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | semmle.label | pouter [post update] [inner_nested, a] |
522+
| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | semmle.label | ref arg inner_nested [a] |
523+
| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | semmle.label | pouter [post update] [a] |
524+
| by_reference.cpp:128:23:128:23 | ref arg a | semmle.label | ref arg a |
525+
| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | semmle.label | outer [inner_nested, a] |
526+
| by_reference.cpp:130:14:130:25 | inner_nested [a] | semmle.label | inner_nested [a] |
527+
| by_reference.cpp:130:27:130:27 | a | semmle.label | a |
528+
| by_reference.cpp:132:8:132:12 | outer [a] | semmle.label | outer [a] |
529+
| by_reference.cpp:132:14:132:14 | a | semmle.label | a |
530+
| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | semmle.label | pouter [inner_nested, a] |
531+
| by_reference.cpp:134:16:134:27 | inner_nested [a] | semmle.label | inner_nested [a] |
532+
| by_reference.cpp:134:29:134:29 | a | semmle.label | a |
533+
| by_reference.cpp:136:8:136:13 | pouter [a] | semmle.label | pouter [a] |
534+
| by_reference.cpp:136:16:136:16 | a | semmle.label | a |
451535
| complex.cpp:34:15:34:15 | b [f, a_] | semmle.label | b [f, a_] |
452536
| complex.cpp:34:15:34:15 | b [f, b_] | semmle.label | b [f, b_] |
453537
| complex.cpp:44:8:44:8 | b [f, a_] | semmle.label | b [f, a_] |
@@ -490,6 +574,19 @@ nodes
490574
| constructors.cpp:43:9:43:9 | g [b_] | semmle.label | g [b_] |
491575
| constructors.cpp:46:9:46:9 | h [a_] | semmle.label | h [a_] |
492576
| constructors.cpp:46:9:46:9 | h [b_] | semmle.label | h [b_] |
577+
| qualifiers.cpp:22:5:22:9 | outer [post update] [inner, a] | semmle.label | outer [post update] [inner, a] |
578+
| qualifiers.cpp:22:5:22:38 | ... = ... | semmle.label | ... = ... |
579+
| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | semmle.label | call to getInner [post update] [a] |
580+
| qualifiers.cpp:22:27:22:36 | call to user_input | semmle.label | call to user_input |
581+
| qualifiers.cpp:23:10:23:14 | outer [inner, a] | semmle.label | outer [inner, a] |
582+
| qualifiers.cpp:23:16:23:20 | inner [a] | semmle.label | inner [a] |
583+
| qualifiers.cpp:23:23:23:23 | a | semmle.label | a |
584+
| qualifiers.cpp:27:5:27:9 | outer [post update] [inner, a] | semmle.label | outer [post update] [inner, a] |
585+
| qualifiers.cpp:27:11:27:18 | call to getInner [post update] [a] | semmle.label | call to getInner [post update] [a] |
586+
| qualifiers.cpp:27:28:27:37 | call to user_input | semmle.label | call to user_input |
587+
| qualifiers.cpp:28:10:28:14 | outer [inner, a] | semmle.label | outer [inner, a] |
588+
| qualifiers.cpp:28:16:28:20 | inner [a] | semmle.label | inner [a] |
589+
| qualifiers.cpp:28:23:28:23 | a | semmle.label | a |
493590
| simple.cpp:26:15:26:15 | f [a_] | semmle.label | f [a_] |
494591
| simple.cpp:26:15:26:15 | f [b_] | semmle.label | f [b_] |
495592
| simple.cpp:28:10:28:10 | f [a_] | semmle.label | f [a_] |
@@ -577,6 +674,12 @@ nodes
577674
| by_reference.cpp:57:10:57:22 | call to getIndirectly | by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:57:10:57:22 | call to getIndirectly | call to getIndirectly flows from $@ | by_reference.cpp:56:19:56:28 | call to user_input | call to user_input |
578675
| by_reference.cpp:63:10:63:28 | call to getThroughNonMember | by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | call to getThroughNonMember flows from $@ | by_reference.cpp:62:25:62:34 | call to user_input | call to user_input |
579676
| by_reference.cpp:69:8:69:20 | call to nonMemberGetA | by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | call to nonMemberGetA flows from $@ | by_reference.cpp:68:21:68:30 | call to user_input | call to user_input |
677+
| by_reference.cpp:111:25:111:25 | a | by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:111:25:111:25 | a | a flows from $@ | by_reference.cpp:84:14:84:23 | call to user_input | call to user_input |
678+
| by_reference.cpp:115:27:115:27 | a | by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:115:27:115:27 | a | a flows from $@ | by_reference.cpp:84:14:84:23 | call to user_input | call to user_input |
679+
| by_reference.cpp:130:27:130:27 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:130:27:130:27 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input |
680+
| by_reference.cpp:132:14:132:14 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:132:14:132:14 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input |
681+
| by_reference.cpp:134:29:134:29 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:134:29:134:29 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input |
682+
| by_reference.cpp:136:16:136:16 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:136:16:136:16 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input |
580683
| complex.cpp:44:12:44:12 | call to a | complex.cpp:55:13:55:22 | call to user_input | complex.cpp:44:12:44:12 | call to a | call to a flows from $@ | complex.cpp:55:13:55:22 | call to user_input | call to user_input |
581684
| complex.cpp:44:12:44:12 | call to a | complex.cpp:57:13:57:22 | call to user_input | complex.cpp:44:12:44:12 | call to a | call to a flows from $@ | complex.cpp:57:13:57:22 | call to user_input | call to user_input |
582685
| complex.cpp:45:12:45:12 | call to b | complex.cpp:56:13:56:22 | call to user_input | complex.cpp:45:12:45:12 | call to b | call to b flows from $@ | complex.cpp:56:13:56:22 | call to user_input | call to user_input |
@@ -585,6 +688,8 @@ nodes
585688
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:36:11:36:20 | call to user_input | call to user_input |
586689
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:35:14:35:23 | call to user_input | call to user_input |
587690
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:36:25:36:34 | call to user_input | call to user_input |
691+
| qualifiers.cpp:23:23:23:23 | a | qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:23:23:23:23 | a | a flows from $@ | qualifiers.cpp:22:27:22:36 | call to user_input | call to user_input |
692+
| qualifiers.cpp:28:23:28:23 | a | qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:28:23:28:23 | a | a flows from $@ | qualifiers.cpp:27:28:27:37 | call to user_input | call to user_input |
588693
| simple.cpp:28:12:28:12 | call to a | simple.cpp:39:12:39:21 | call to user_input | simple.cpp:28:12:28:12 | call to a | call to a flows from $@ | simple.cpp:39:12:39:21 | call to user_input | call to user_input |
589694
| simple.cpp:28:12:28:12 | call to a | simple.cpp:41:12:41:21 | call to user_input | simple.cpp:28:12:28:12 | call to a | call to a flows from $@ | simple.cpp:41:12:41:21 | call to user_input | call to user_input |
590695
| simple.cpp:29:12:29:12 | call to b | simple.cpp:40:12:40:21 | call to user_input | simple.cpp:29:12:29:12 | call to b | call to b flows from $@ | simple.cpp:40:12:40:21 | call to user_input | call to user_input |

0 commit comments

Comments
 (0)