Skip to content

Commit 48b6b67

Browse files
authored
Merge pull request #1880 from ian-semmle/clang
Approved by jbj
2 parents 6b0bbd5 + 1d56407 commit 48b6b67

File tree

7 files changed

+167
-162
lines changed

7 files changed

+167
-162
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// semmle-extractor-options: --edg --clang
2+
3+
int source();
4+
void sink(int); void sink(const int *); void sink(int **);
5+
6+
struct twoIntFields {
7+
int m1, m2;
8+
int getFirst() { return m1; }
9+
};
10+
11+
void following_pointers(
12+
int sourceArray1[],
13+
int cleanArray1[],
14+
twoIntFields sourceStruct1,
15+
twoIntFields *sourceStruct1_ptr,
16+
int (*sourceFunctionPointer)())
17+
{
18+
sink(sourceArray1); // flow
19+
20+
sink(sourceArray1[0]); // no flow
21+
sink(*sourceArray1); // no flow
22+
sink(&sourceArray1); // no flow (since sourceArray1 is really a pointer)
23+
24+
sink(sourceStruct1.m1); // no flow
25+
sink(sourceStruct1_ptr->m1); // no flow
26+
sink(sourceStruct1_ptr->getFirst()); // no flow
27+
28+
sourceStruct1_ptr->m1 = source();
29+
sink(sourceStruct1_ptr->m1); // flow
30+
sink(sourceStruct1_ptr->getFirst()); // flow [NOT DETECTED with IR]
31+
sink(sourceStruct1_ptr->m2); // no flow
32+
sink(sourceStruct1.m1); // no flow
33+
34+
twoIntFields s = { source(), source() };
35+
36+
37+
sink(s.m2); // flow
38+
39+
twoIntFields sArray[1] = { { source(), source() } };
40+
// TODO: fix this like above
41+
sink(sArray[0].m2); // flow (AST dataflow misses this due to limitations of the analysis)
42+
43+
twoIntFields sSwapped = { .m2 = source(), .m1 = 0 };
44+
45+
sink(sSwapped.m2); // flow
46+
47+
sink(sourceFunctionPointer()); // no flow
48+
49+
int stackArray[2] = { source(), source() };
50+
stackArray[0] = source();
51+
sink(stackArray); // no flow
52+
}
53+

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,25 @@
3737
| test.cpp:24:10:24:11 | t2 | test.cpp:23:23:23:24 | t1 |
3838
| test.cpp:24:10:24:11 | t2 | test.cpp:24:5:24:11 | ... = ... |
3939
| test.cpp:24:10:24:11 | t2 | test.cpp:26:8:26:9 | t1 |
40-
| test.cpp:430:48:430:54 | source1 | test.cpp:432:17:432:23 | source1 |
41-
| test.cpp:431:12:431:13 | 0 | test.cpp:432:11:432:13 | tmp |
42-
| test.cpp:431:12:431:13 | 0 | test.cpp:432:33:432:35 | tmp |
43-
| test.cpp:431:12:431:13 | 0 | test.cpp:433:8:433:10 | tmp |
44-
| test.cpp:432:10:432:13 | & ... | test.cpp:432:3:432:8 | call to memcpy |
45-
| test.cpp:432:10:432:13 | ref arg & ... | test.cpp:432:3:432:8 | call to memcpy |
46-
| test.cpp:432:10:432:13 | ref arg & ... | test.cpp:432:33:432:35 | tmp |
47-
| test.cpp:432:10:432:13 | ref arg & ... | test.cpp:433:8:433:10 | tmp |
48-
| test.cpp:432:17:432:23 | source1 | test.cpp:432:10:432:13 | ref arg & ... |
49-
| test.cpp:436:53:436:59 | source1 | test.cpp:439:17:439:23 | source1 |
50-
| test.cpp:436:66:436:66 | b | test.cpp:441:7:441:7 | b |
51-
| test.cpp:437:12:437:13 | 0 | test.cpp:438:19:438:21 | tmp |
52-
| test.cpp:437:12:437:13 | 0 | test.cpp:439:11:439:13 | tmp |
53-
| test.cpp:437:12:437:13 | 0 | test.cpp:439:33:439:35 | tmp |
54-
| test.cpp:437:12:437:13 | 0 | test.cpp:440:8:440:10 | tmp |
55-
| test.cpp:437:12:437:13 | 0 | test.cpp:442:10:442:12 | tmp |
56-
| test.cpp:439:10:439:13 | & ... | test.cpp:439:3:439:8 | call to memcpy |
57-
| test.cpp:439:10:439:13 | ref arg & ... | test.cpp:439:3:439:8 | call to memcpy |
58-
| test.cpp:439:10:439:13 | ref arg & ... | test.cpp:439:33:439:35 | tmp |
59-
| test.cpp:439:10:439:13 | ref arg & ... | test.cpp:440:8:440:10 | tmp |
60-
| test.cpp:439:10:439:13 | ref arg & ... | test.cpp:442:10:442:12 | tmp |
61-
| test.cpp:439:17:439:23 | source1 | test.cpp:439:10:439:13 | ref arg & ... |
40+
| test.cpp:382:48:382:54 | source1 | test.cpp:384:17:384:23 | source1 |
41+
| test.cpp:383:12:383:13 | 0 | test.cpp:384:11:384:13 | tmp |
42+
| test.cpp:383:12:383:13 | 0 | test.cpp:384:33:384:35 | tmp |
43+
| test.cpp:383:12:383:13 | 0 | test.cpp:385:8:385:10 | tmp |
44+
| test.cpp:384:10:384:13 | & ... | test.cpp:384:3:384:8 | call to memcpy |
45+
| test.cpp:384:10:384:13 | ref arg & ... | test.cpp:384:3:384:8 | call to memcpy |
46+
| test.cpp:384:10:384:13 | ref arg & ... | test.cpp:384:33:384:35 | tmp |
47+
| test.cpp:384:10:384:13 | ref arg & ... | test.cpp:385:8:385:10 | tmp |
48+
| test.cpp:384:17:384:23 | source1 | test.cpp:384:10:384:13 | ref arg & ... |
49+
| test.cpp:388:53:388:59 | source1 | test.cpp:391:17:391:23 | source1 |
50+
| test.cpp:388:66:388:66 | b | test.cpp:393:7:393:7 | b |
51+
| test.cpp:389:12:389:13 | 0 | test.cpp:390:19:390:21 | tmp |
52+
| test.cpp:389:12:389:13 | 0 | test.cpp:391:11:391:13 | tmp |
53+
| test.cpp:389:12:389:13 | 0 | test.cpp:391:33:391:35 | tmp |
54+
| test.cpp:389:12:389:13 | 0 | test.cpp:392:8:392:10 | tmp |
55+
| test.cpp:389:12:389:13 | 0 | test.cpp:394:10:394:12 | tmp |
56+
| test.cpp:391:10:391:13 | & ... | test.cpp:391:3:391:8 | call to memcpy |
57+
| test.cpp:391:10:391:13 | ref arg & ... | test.cpp:391:3:391:8 | call to memcpy |
58+
| test.cpp:391:10:391:13 | ref arg & ... | test.cpp:391:33:391:35 | tmp |
59+
| test.cpp:391:10:391:13 | ref arg & ... | test.cpp:392:8:392:10 | tmp |
60+
| test.cpp:391:10:391:13 | ref arg & ... | test.cpp:394:10:394:12 | tmp |
61+
| test.cpp:391:17:391:23 | source1 | test.cpp:391:10:391:13 | ref arg & ... |

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

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -111,54 +111,6 @@ void local_references(int &source1, int clean1) {
111111
}
112112
}
113113

114-
struct twoIntFields {
115-
int m1, m2;
116-
int getFirst() { return m1; }
117-
};
118-
119-
void following_pointers(
120-
int sourceArray1[],
121-
int cleanArray1[],
122-
twoIntFields sourceStruct1,
123-
twoIntFields *sourceStruct1_ptr,
124-
int (*sourceFunctionPointer)())
125-
{
126-
sink(sourceArray1); // flow
127-
128-
sink(sourceArray1[0]); // no flow
129-
sink(*sourceArray1); // no flow
130-
sink(&sourceArray1); // no flow (since sourceArray1 is really a pointer)
131-
132-
sink(sourceStruct1.m1); // no flow
133-
sink(sourceStruct1_ptr->m1); // no flow
134-
sink(sourceStruct1_ptr->getFirst()); // no flow
135-
136-
sourceStruct1_ptr->m1 = source();
137-
sink(sourceStruct1_ptr->m1); // flow
138-
sink(sourceStruct1_ptr->getFirst()); // flow [NOT DETECTED with IR]
139-
sink(sourceStruct1_ptr->m2); // no flow
140-
sink(sourceStruct1.m1); // no flow
141-
142-
twoIntFields s = { source(), source() };
143-
144-
145-
sink(s.m2); // flow
146-
147-
twoIntFields sArray[1] = { { source(), source() } };
148-
// TODO: fix this like above
149-
sink(sArray[0].m2); // flow (AST dataflow misses this due to limitations of the analysis)
150-
151-
twoIntFields sSwapped = { .m2 = source(), .m1 = 0 };
152-
153-
sink(sSwapped.m2); // flow
154-
155-
sink(sourceFunctionPointer()); // no flow
156-
157-
int stackArray[2] = { source(), source() };
158-
stackArray[0] = source();
159-
sink(stackArray); // no flow
160-
}
161-
162114
int alwaysAssignSource(int *out) {
163115
*out = source();
164116
return 0;

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

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
| acrossLinkTargets.cpp:12:8:12:8 | x | acrossLinkTargets.cpp:19:27:19:32 | call to source |
2+
| clang.cpp:18:8:18:19 | sourceArray1 | clang.cpp:12:9:12:20 | sourceArray1 |
3+
| clang.cpp:29:27:29:28 | m1 | clang.cpp:28:27:28:32 | call to source |
4+
| clang.cpp:30:27:30:34 | call to getFirst | clang.cpp:28:27:28:32 | call to source |
5+
| clang.cpp:37:10:37:11 | m2 | clang.cpp:34:32:34:37 | call to source |
6+
| clang.cpp:45:17:45:18 | m2 | clang.cpp:43:35:43:40 | call to source |
27
| lambdas.cpp:14:3:14:6 | t | lambdas.cpp:8:10:8:15 | call to source |
38
| lambdas.cpp:18:8:18:8 | call to operator() | lambdas.cpp:8:10:8:15 | call to source |
49
| lambdas.cpp:21:3:21:6 | t | lambdas.cpp:8:10:8:15 | call to source |
@@ -19,42 +24,37 @@
1924
| test.cpp:86:8:86:9 | i1 | test.cpp:83:7:83:8 | u2 |
2025
| test.cpp:90:8:90:14 | source1 | test.cpp:89:28:89:34 | source1 |
2126
| test.cpp:103:10:103:12 | ref | test.cpp:100:13:100:18 | call to source |
22-
| test.cpp:126:8:126:19 | sourceArray1 | test.cpp:120:9:120:20 | sourceArray1 |
23-
| test.cpp:137:27:137:28 | m1 | test.cpp:136:27:136:32 | call to source |
24-
| test.cpp:138:27:138:34 | call to getFirst | test.cpp:136:27:136:32 | call to source |
25-
| test.cpp:145:10:145:11 | m2 | test.cpp:142:32:142:37 | call to source |
26-
| test.cpp:153:17:153:18 | m2 | test.cpp:151:35:151:40 | call to source |
27-
| test.cpp:188:8:188:8 | y | test.cpp:186:27:186:32 | call to source |
28-
| test.cpp:192:8:192:8 | s | test.cpp:199:33:199:38 | call to source |
29-
| test.cpp:200:8:200:8 | y | test.cpp:199:33:199:38 | call to source |
30-
| test.cpp:205:8:205:8 | x | test.cpp:212:34:212:39 | call to source |
31-
| test.cpp:213:8:213:8 | y | test.cpp:212:34:212:39 | call to source |
32-
| test.cpp:226:8:226:8 | y | test.cpp:219:11:219:16 | call to source |
33-
| test.cpp:308:12:308:12 | x | test.cpp:293:14:293:19 | call to source |
34-
| test.cpp:314:12:314:12 | x | test.cpp:313:22:313:27 | call to source |
35-
| test.cpp:337:14:337:14 | x | test.cpp:353:17:353:22 | call to source |
36-
| test.cpp:366:7:366:7 | x | test.cpp:362:4:362:9 | call to source |
37-
| test.cpp:397:10:397:18 | globalVar | test.cpp:395:17:395:22 | call to source |
38-
| test.cpp:413:10:413:14 | field | test.cpp:407:13:407:18 | call to source |
39-
| test.cpp:417:10:417:14 | field | test.cpp:421:13:421:18 | call to source |
40-
| test.cpp:423:10:423:14 | field | test.cpp:421:13:421:18 | call to source |
41-
| test.cpp:433:8:433:10 | tmp | test.cpp:430:48:430:54 | source1 |
42-
| test.cpp:440:8:440:10 | tmp | test.cpp:436:53:436:59 | source1 |
43-
| test.cpp:442:10:442:12 | tmp | test.cpp:436:53:436:59 | source1 |
44-
| test.cpp:449:8:449:10 | tmp | test.cpp:447:7:447:9 | tmp |
45-
| test.cpp:456:8:456:10 | tmp | test.cpp:453:7:453:9 | tmp |
46-
| test.cpp:466:8:466:12 | local | test.cpp:464:7:464:11 | local |
47-
| test.cpp:466:8:466:12 | local | test.cpp:465:16:465:20 | ref arg local |
48-
| test.cpp:472:8:472:12 | local | test.cpp:470:7:470:11 | local |
49-
| test.cpp:472:8:472:12 | local | test.cpp:471:20:471:25 | ref arg & ... |
50-
| test.cpp:478:8:478:12 | local | test.cpp:476:7:476:11 | local |
51-
| test.cpp:478:8:478:12 | local | test.cpp:477:20:477:24 | ref arg local |
52-
| test.cpp:485:8:485:12 | local | test.cpp:483:7:483:11 | local |
53-
| test.cpp:485:8:485:12 | local | test.cpp:484:18:484:23 | ref arg & ... |
54-
| test.cpp:491:8:491:12 | local | test.cpp:489:7:489:11 | local |
55-
| test.cpp:491:8:491:12 | local | test.cpp:490:18:490:22 | ref arg local |
56-
| test.cpp:498:9:498:22 | (statement expression) | test.cpp:497:26:497:32 | source1 |
57-
| test.cpp:509:8:509:12 | local | test.cpp:497:26:497:32 | source1 |
27+
| test.cpp:140:8:140:8 | y | test.cpp:138:27:138:32 | call to source |
28+
| test.cpp:144:8:144:8 | s | test.cpp:151:33:151:38 | call to source |
29+
| test.cpp:152:8:152:8 | y | test.cpp:151:33:151:38 | call to source |
30+
| test.cpp:157:8:157:8 | x | test.cpp:164:34:164:39 | call to source |
31+
| test.cpp:165:8:165:8 | y | test.cpp:164:34:164:39 | call to source |
32+
| test.cpp:178:8:178:8 | y | test.cpp:171:11:171:16 | call to source |
33+
| test.cpp:260:12:260:12 | x | test.cpp:245:14:245:19 | call to source |
34+
| test.cpp:266:12:266:12 | x | test.cpp:265:22:265:27 | call to source |
35+
| test.cpp:289:14:289:14 | x | test.cpp:305:17:305:22 | call to source |
36+
| test.cpp:318:7:318:7 | x | test.cpp:314:4:314:9 | call to source |
37+
| test.cpp:349:10:349:18 | globalVar | test.cpp:347:17:347:22 | call to source |
38+
| test.cpp:365:10:365:14 | field | test.cpp:359:13:359:18 | call to source |
39+
| test.cpp:369:10:369:14 | field | test.cpp:373:13:373:18 | call to source |
40+
| test.cpp:375:10:375:14 | field | test.cpp:373:13:373:18 | call to source |
41+
| test.cpp:385:8:385:10 | tmp | test.cpp:382:48:382:54 | source1 |
42+
| test.cpp:392:8:392:10 | tmp | test.cpp:388:53:388:59 | source1 |
43+
| test.cpp:394:10:394:12 | tmp | test.cpp:388:53:388:59 | source1 |
44+
| test.cpp:401:8:401:10 | tmp | test.cpp:399:7:399:9 | tmp |
45+
| test.cpp:408:8:408:10 | tmp | test.cpp:405:7:405:9 | tmp |
46+
| test.cpp:418:8:418:12 | local | test.cpp:416:7:416:11 | local |
47+
| test.cpp:418:8:418:12 | local | test.cpp:417:16:417:20 | ref arg local |
48+
| test.cpp:424:8:424:12 | local | test.cpp:422:7:422:11 | local |
49+
| test.cpp:424:8:424:12 | local | test.cpp:423:20:423:25 | ref arg & ... |
50+
| test.cpp:430:8:430:12 | local | test.cpp:428:7:428:11 | local |
51+
| test.cpp:430:8:430:12 | local | test.cpp:429:20:429:24 | ref arg local |
52+
| test.cpp:437:8:437:12 | local | test.cpp:435:7:435:11 | local |
53+
| test.cpp:437:8:437:12 | local | test.cpp:436:18:436:23 | ref arg & ... |
54+
| test.cpp:443:8:443:12 | local | test.cpp:441:7:441:11 | local |
55+
| test.cpp:443:8:443:12 | local | test.cpp:442:18:442:22 | ref arg local |
56+
| test.cpp:450:9:450:22 | (statement expression) | test.cpp:449:26:449:32 | source1 |
57+
| test.cpp:461:8:461:12 | local | test.cpp:449:26:449:32 | source1 |
5858
| true_upon_entry.cpp:21:8:21:8 | x | true_upon_entry.cpp:17:11:17:16 | call to source |
5959
| true_upon_entry.cpp:29:8:29:8 | x | true_upon_entry.cpp:27:9:27:14 | call to source |
6060
| true_upon_entry.cpp:39:8:39:8 | x | true_upon_entry.cpp:33:11:33:16 | call to source |
Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
| clang.cpp:28:27:28:32 | clang.cpp:29:27:29:28 | AST only |
2+
| clang.cpp:28:27:28:32 | clang.cpp:30:27:30:34 | AST only |
3+
| clang.cpp:39:42:39:47 | clang.cpp:41:18:41:19 | IR only |
14
| lambdas.cpp:8:10:8:15 | lambdas.cpp:14:3:14:6 | AST only |
25
| lambdas.cpp:8:10:8:15 | lambdas.cpp:18:8:18:8 | AST only |
36
| lambdas.cpp:8:10:8:15 | lambdas.cpp:21:3:21:6 | AST only |
@@ -7,28 +10,25 @@
710
| test.cpp:89:28:89:34 | test.cpp:92:8:92:14 | IR only |
811
| test.cpp:100:13:100:18 | test.cpp:103:10:103:12 | AST only |
912
| test.cpp:109:9:109:14 | test.cpp:110:10:110:12 | IR only |
10-
| test.cpp:136:27:136:32 | test.cpp:137:27:137:28 | AST only |
11-
| test.cpp:136:27:136:32 | test.cpp:138:27:138:34 | AST only |
12-
| test.cpp:147:42:147:47 | test.cpp:149:18:149:19 | IR only |
13-
| test.cpp:395:17:395:22 | test.cpp:397:10:397:18 | AST only |
14-
| test.cpp:407:13:407:18 | test.cpp:413:10:413:14 | AST only |
15-
| test.cpp:421:13:421:18 | test.cpp:417:10:417:14 | AST only |
16-
| test.cpp:421:13:421:18 | test.cpp:423:10:423:14 | AST only |
17-
| test.cpp:430:48:430:54 | test.cpp:433:8:433:10 | AST only |
18-
| test.cpp:436:53:436:59 | test.cpp:440:8:440:10 | AST only |
19-
| test.cpp:436:53:436:59 | test.cpp:442:10:442:12 | AST only |
20-
| test.cpp:447:7:447:9 | test.cpp:449:8:449:10 | AST only |
21-
| test.cpp:453:7:453:9 | test.cpp:456:8:456:10 | AST only |
22-
| test.cpp:464:7:464:11 | test.cpp:466:8:466:12 | AST only |
23-
| test.cpp:465:16:465:20 | test.cpp:466:8:466:12 | AST only |
24-
| test.cpp:470:7:470:11 | test.cpp:472:8:472:12 | AST only |
25-
| test.cpp:471:20:471:25 | test.cpp:472:8:472:12 | AST only |
26-
| test.cpp:476:7:476:11 | test.cpp:478:8:478:12 | AST only |
27-
| test.cpp:477:20:477:24 | test.cpp:478:8:478:12 | AST only |
28-
| test.cpp:483:7:483:11 | test.cpp:485:8:485:12 | AST only |
29-
| test.cpp:484:18:484:23 | test.cpp:485:8:485:12 | AST only |
30-
| test.cpp:489:7:489:11 | test.cpp:491:8:491:12 | AST only |
31-
| test.cpp:490:18:490:22 | test.cpp:491:8:491:12 | AST only |
13+
| test.cpp:347:17:347:22 | test.cpp:349:10:349:18 | AST only |
14+
| test.cpp:359:13:359:18 | test.cpp:365:10:365:14 | AST only |
15+
| test.cpp:373:13:373:18 | test.cpp:369:10:369:14 | AST only |
16+
| test.cpp:373:13:373:18 | test.cpp:375:10:375:14 | AST only |
17+
| test.cpp:382:48:382:54 | test.cpp:385:8:385:10 | AST only |
18+
| test.cpp:388:53:388:59 | test.cpp:392:8:392:10 | AST only |
19+
| test.cpp:388:53:388:59 | test.cpp:394:10:394:12 | AST only |
20+
| test.cpp:399:7:399:9 | test.cpp:401:8:401:10 | AST only |
21+
| test.cpp:405:7:405:9 | test.cpp:408:8:408:10 | AST only |
22+
| test.cpp:416:7:416:11 | test.cpp:418:8:418:12 | AST only |
23+
| test.cpp:417:16:417:20 | test.cpp:418:8:418:12 | AST only |
24+
| test.cpp:422:7:422:11 | test.cpp:424:8:424:12 | AST only |
25+
| test.cpp:423:20:423:25 | test.cpp:424:8:424:12 | AST only |
26+
| test.cpp:428:7:428:11 | test.cpp:430:8:430:12 | AST only |
27+
| test.cpp:429:20:429:24 | test.cpp:430:8:430:12 | AST only |
28+
| test.cpp:435:7:435:11 | test.cpp:437:8:437:12 | AST only |
29+
| test.cpp:436:18:436:23 | test.cpp:437:8:437:12 | AST only |
30+
| test.cpp:441:7:441:11 | test.cpp:443:8:443:12 | AST only |
31+
| test.cpp:442:18:442:22 | test.cpp:443:8:443:12 | AST only |
3232
| true_upon_entry.cpp:9:11:9:16 | true_upon_entry.cpp:13:8:13:8 | IR only |
3333
| true_upon_entry.cpp:62:11:62:16 | true_upon_entry.cpp:66:8:66:8 | IR only |
3434
| true_upon_entry.cpp:98:11:98:16 | true_upon_entry.cpp:105:8:105:8 | IR only |

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

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
| acrossLinkTargets.cpp:12:8:12:8 | Convert: (int)... | acrossLinkTargets.cpp:19:27:19:32 | Call: call to source |
22
| acrossLinkTargets.cpp:12:8:12:8 | Load: x | acrossLinkTargets.cpp:19:27:19:32 | Call: call to source |
3+
| clang.cpp:18:8:18:19 | Convert: (const int *)... | clang.cpp:12:9:12:20 | InitializeParameter: sourceArray1 |
4+
| clang.cpp:18:8:18:19 | Load: sourceArray1 | clang.cpp:12:9:12:20 | InitializeParameter: sourceArray1 |
5+
| clang.cpp:37:10:37:11 | Load: m2 | clang.cpp:34:32:34:37 | Call: call to source |
6+
| clang.cpp:41:18:41:19 | Load: m2 | clang.cpp:39:42:39:47 | Call: call to source |
7+
| clang.cpp:45:17:45:18 | Load: m2 | clang.cpp:43:35:43:40 | Call: call to source |
38
| test.cpp:7:8:7:9 | Load: t1 | test.cpp:6:12:6:17 | Call: call to source |
49
| test.cpp:9:8:9:9 | Load: t1 | test.cpp:6:12:6:17 | Call: call to source |
510
| test.cpp:10:8:10:9 | Load: t2 | test.cpp:6:12:6:17 | Call: call to source |
@@ -15,23 +20,18 @@
1520
| test.cpp:90:8:90:14 | Load: source1 | test.cpp:89:28:89:34 | InitializeParameter: source1 |
1621
| test.cpp:92:8:92:14 | Load: source1 | test.cpp:89:28:89:34 | InitializeParameter: source1 |
1722
| test.cpp:110:10:110:12 | Load: (reference dereference) | test.cpp:109:9:109:14 | Call: call to source |
18-
| test.cpp:126:8:126:19 | Convert: (const int *)... | test.cpp:120:9:120:20 | InitializeParameter: sourceArray1 |
19-
| test.cpp:126:8:126:19 | Load: sourceArray1 | test.cpp:120:9:120:20 | InitializeParameter: sourceArray1 |
20-
| test.cpp:145:10:145:11 | Load: m2 | test.cpp:142:32:142:37 | Call: call to source |
21-
| test.cpp:149:18:149:19 | Load: m2 | test.cpp:147:42:147:47 | Call: call to source |
22-
| test.cpp:153:17:153:18 | Load: m2 | test.cpp:151:35:151:40 | Call: call to source |
23-
| test.cpp:188:8:188:8 | Load: y | test.cpp:186:27:186:32 | Call: call to source |
24-
| test.cpp:192:8:192:8 | Load: s | test.cpp:199:33:199:38 | Call: call to source |
25-
| test.cpp:200:8:200:8 | Load: y | test.cpp:199:33:199:38 | Call: call to source |
26-
| test.cpp:205:8:205:8 | Load: x | test.cpp:212:34:212:39 | Call: call to source |
27-
| test.cpp:213:8:213:8 | Load: y | test.cpp:212:34:212:39 | Call: call to source |
28-
| test.cpp:226:8:226:8 | Load: y | test.cpp:219:11:219:16 | Call: call to source |
29-
| test.cpp:308:12:308:12 | Load: x | test.cpp:293:14:293:19 | Call: call to source |
30-
| test.cpp:314:12:314:12 | Load: x | test.cpp:313:22:313:27 | Call: call to source |
31-
| test.cpp:337:14:337:14 | Load: x | test.cpp:353:17:353:22 | Call: call to source |
32-
| test.cpp:366:7:366:7 | Load: x | test.cpp:362:4:362:9 | Call: call to source |
33-
| test.cpp:498:9:498:22 | CopyValue: (statement expression) | test.cpp:497:26:497:32 | InitializeParameter: source1 |
34-
| test.cpp:509:8:509:12 | Load: local | test.cpp:497:26:497:32 | InitializeParameter: source1 |
23+
| test.cpp:140:8:140:8 | Load: y | test.cpp:138:27:138:32 | Call: call to source |
24+
| test.cpp:144:8:144:8 | Load: s | test.cpp:151:33:151:38 | Call: call to source |
25+
| test.cpp:152:8:152:8 | Load: y | test.cpp:151:33:151:38 | Call: call to source |
26+
| test.cpp:157:8:157:8 | Load: x | test.cpp:164:34:164:39 | Call: call to source |
27+
| test.cpp:165:8:165:8 | Load: y | test.cpp:164:34:164:39 | Call: call to source |
28+
| test.cpp:178:8:178:8 | Load: y | test.cpp:171:11:171:16 | Call: call to source |
29+
| test.cpp:260:12:260:12 | Load: x | test.cpp:245:14:245:19 | Call: call to source |
30+
| test.cpp:266:12:266:12 | Load: x | test.cpp:265:22:265:27 | Call: call to source |
31+
| test.cpp:289:14:289:14 | Load: x | test.cpp:305:17:305:22 | Call: call to source |
32+
| test.cpp:318:7:318:7 | Load: x | test.cpp:314:4:314:9 | Call: call to source |
33+
| test.cpp:450:9:450:22 | CopyValue: (statement expression) | test.cpp:449:26:449:32 | InitializeParameter: source1 |
34+
| test.cpp:461:8:461:12 | Load: local | test.cpp:449:26:449:32 | InitializeParameter: source1 |
3535
| true_upon_entry.cpp:13:8:13:8 | Load: x | true_upon_entry.cpp:9:11:9:16 | Call: call to source |
3636
| true_upon_entry.cpp:21:8:21:8 | Load: x | true_upon_entry.cpp:17:11:17:16 | Call: call to source |
3737
| true_upon_entry.cpp:29:8:29:8 | Load: x | true_upon_entry.cpp:27:9:27:14 | Call: call to source |

0 commit comments

Comments
 (0)