Merge branch 'main' into cleartext-perf

This commit is contained in:
Geoffrey White
2022-09-09 11:40:47 +01:00
444 changed files with 29712 additions and 7121 deletions

View File

@@ -1,32 +1,32 @@
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:15:6:15 | InitializeParameter: x | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cpp:7:7:7:11 | test.cpp:7:7:7:11 |
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:20:10:20:10 | Store: x | test.cpp:14:15:14:15 | InitializeParameter: x | -2 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:20:10:20:10 | Store: x | test.cpp:14:22:14:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | test.cpp:15:7:15:11 | test.cpp:15:7:15:11 |
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:15:6:15 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | ValueNumberBound | 0 | false | CompareLT: ... < ... | test.cpp:7:7:7:11 | test.cpp:7:7:7:11 |
| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:20:10:20:10 | Store: x | test.cpp:14:15:14:15 | ValueNumberBound | -2 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:20:10:20:10 | Store: x | test.cpp:14:22:14:22 | ValueNumberBound | -2 | false | CompareLT: ... < ... | test.cpp:15:7:15:11 | test.cpp:15:7:15:11 |
| test.cpp:27:10:27:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:27:10:27:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 |
| test.cpp:27:10:27:10 | Load: i | test.cpp:24:15:24:15 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 |
| test.cpp:30:10:30:10 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 |
| test.cpp:30:10:30:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:30:10:30:10 | Load: i | test.cpp:26:14:26:14 | Phi: i | 0 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 |
| test.cpp:30:10:30:10 | Load: i | test.cpp:24:15:24:15 | ValueNumberBound | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:30:10:30:10 | Load: i | test.cpp:26:14:26:14 | ValueNumberBound | 0 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 |
| test.cpp:33:10:33:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:26:14:26:14 | Phi: i | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:29:14:29:14 | Phi: i | 0 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 |
| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:16:38:20 | InitializeParameter: begin | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:28:38:30 | InitializeParameter: end | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 |
| test.cpp:49:12:49:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 |
| test.cpp:49:12:49:12 | Load: x | test.cpp:46:29:46:29 | InitializeParameter: z | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 |
| test.cpp:54:12:54:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:39:61:51 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:32:61:35 | Phi: iter | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:39:61:51 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:24:15:24:15 | ValueNumberBound | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:26:14:26:14 | ValueNumberBound | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 |
| test.cpp:33:10:33:10 | Load: i | test.cpp:29:14:29:14 | ValueNumberBound | 0 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 |
| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:16:38:20 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:28:38:30 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 |
| test.cpp:49:12:49:12 | Load: x | test.cpp:46:22:46:22 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 |
| test.cpp:49:12:49:12 | Load: x | test.cpp:46:29:46:29 | ValueNumberBound | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 |
| test.cpp:54:12:54:12 | Load: x | test.cpp:46:22:46:22 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | ValueNumberBound | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 |
| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:39:61:51 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | ValueNumberBound | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:32:61:35 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:39:61:51 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 |
| test.cpp:77:12:77:12 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:77:12:77:12 | Load: i | test.cpp:72:15:72:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 |
| test.cpp:77:12:77:12 | Load: i | test.cpp:72:22:72:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 |
| test.cpp:77:12:77:12 | Load: i | test.cpp:72:15:72:15 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 |
| test.cpp:77:12:77:12 | Load: i | test.cpp:72:22:72:22 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 |
| test.cpp:85:10:85:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | test.cpp:84:7:84:11 | test.cpp:84:7:84:11 |
| test.cpp:87:10:87:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareGT: ... > ... | test.cpp:84:7:84:11 | test.cpp:84:7:84:11 |
| test.cpp:90:10:90:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareGE: ... >= ... | test.cpp:89:7:89:12 | test.cpp:89:7:89:12 |
@@ -35,32 +35,32 @@
| test.cpp:97:10:97:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareLT: ... < ... | test.cpp:94:7:94:11 | test.cpp:94:7:94:11 |
| test.cpp:100:10:100:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 |
| test.cpp:102:10:102:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 |
| test.cpp:117:10:117:10 | Load: i | test.cpp:114:3:114:6 | Phi: call to sink | -1 | true | CompareLT: ... < ... | test.cpp:116:7:116:11 | test.cpp:116:7:116:11 |
| test.cpp:117:10:117:10 | Load: i | test.cpp:114:3:114:6 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:116:7:116:11 | test.cpp:116:7:116:11 |
| test.cpp:130:10:130:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:140:10:140:10 | Store: i | file://:0:0:0:0 | 0 | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:135:16:135:16 | InitializeParameter: x | 0 | false | CompareLT: ... < ... | test.cpp:139:11:139:15 | test.cpp:139:11:139:15 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | false | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | false | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 1 | false | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 |
| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 1 | true | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 |
| test.cpp:169:12:169:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:177:10:177:10 | Load: i | test.cpp:175:23:175:23 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:179:10:179:10 | Load: i | test.cpp:175:23:175:23 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:183:10:183:10 | Load: i | test.cpp:175:23:175:23 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 |
| test.cpp:185:10:185:10 | Load: i | test.cpp:175:23:175:23 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:187:10:187:10 | Store: i | test.cpp:175:23:175:23 | InitializeParameter: x | 0 | false | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 |
| test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | InitializeParameter: i | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | InitializeParameter: i | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:200:10:200:10 | Load: i | test.cpp:198:25:198:25 | InitializeParameter: l | -1 | true | CompareLT: ... < ... | test.cpp:199:7:199:11 | test.cpp:199:7:199:11 |
| test.cpp:203:11:203:11 | Load: i | test.cpp:198:25:198:25 | InitializeParameter: l | -3 | true | CompareLT: ... < ... | test.cpp:202:7:202:15 | test.cpp:202:7:202:15 |
| test.cpp:209:10:209:10 | Load: x | test.cpp:207:24:207:24 | InitializeParameter: y | -3 | true | CompareLT: ... < ... | test.cpp:208:7:208:15 | test.cpp:208:7:208:15 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:135:16:135:16 | ValueNumberBound | 0 | false | CompareLT: ... < ... | test.cpp:139:11:139:15 | test.cpp:139:11:139:15 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | ValueNumberBound | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | ValueNumberBound | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | false | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -2 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 |
| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -2 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | false | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | -1 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 |
| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | 1 | false | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 |
| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | 1 | true | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 |
| test.cpp:169:12:169:12 | Load: x | test.cpp:153:23:153:23 | ValueNumberBound | 0 | false | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 |
| test.cpp:177:10:177:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 1 | false | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:179:10:179:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:183:10:183:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 |
| test.cpp:185:10:185:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 |
| test.cpp:187:10:187:10 | Store: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | false | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 |
| test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | ValueNumberBound | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 |
| test.cpp:200:10:200:10 | Load: i | test.cpp:198:25:198:25 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:199:7:199:11 | test.cpp:199:7:199:11 |
| test.cpp:203:11:203:11 | Load: i | test.cpp:198:25:198:25 | ValueNumberBound | -3 | true | CompareLT: ... < ... | test.cpp:202:7:202:15 | test.cpp:202:7:202:15 |
| test.cpp:209:10:209:10 | Load: x | test.cpp:207:24:207:24 | ValueNumberBound | -3 | true | CompareLT: ... < ... | test.cpp:208:7:208:15 | test.cpp:208:7:208:15 |

View File

@@ -0,0 +1,2 @@
| test.cpp:19:19:19:24 | call to malloc | test.cpp:18:17:18:20 | size | test.cpp:26:18:26:23 | string | test.cpp:26:31:26:39 | (size_t)... |
| test.cpp:19:19:19:24 | call to malloc | test.cpp:18:17:18:20 | size | test.cpp:30:18:30:23 | string | test.cpp:30:31:30:39 | (size_t)... |

View File

@@ -0,0 +1 @@
experimental/Likely Bugs/OverrunWriteProductFlow.ql

View File

@@ -0,0 +1,37 @@
typedef unsigned long long size_t;
int sprintf(char *s, const char *format, ...);
int snprintf(char *s, size_t n, const char *format, ...);
int scanf(const char *format, ...);
int sscanf(const char *s, const char *format, ...);
char *malloc(size_t size);
char *strncpy(char *dst, const char *src, size_t n);
typedef struct
{
char *string;
int size;
} string_t;
string_t *mk_string_t(int size) {
string_t *str = (string_t *) malloc(sizeof(string_t));
str->size = size;
str->string = malloc(size);
return str;
}
void test1(int size, char *buf) {
string_t *str = mk_string_t(size);
strncpy(str->string, buf, str->size);
}
void strncpy_wrapper(string_t *str, char *buf) {
strncpy(str->string, buf, str->size);
}
void test2(int size, char *buf) {
string_t *str = mk_string_t(size);
strncpy_wrapper(str, buf);
}

View File

@@ -0,0 +1,23 @@
| test.cpp:4:17:4:22 | call to malloc | test.cpp:4:24:4:27 | size | test.cpp:10:9:10:11 | arr | test.cpp:4:24:4:27 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:4:24:4:27 | size | test.cpp:10:9:10:11 | arr | test.cpp:4:24:4:27 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:4:24:4:27 | size | test.cpp:10:9:10:11 | arr | test.cpp:5:25:5:28 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:4:24:4:27 | size | test.cpp:10:9:10:11 | arr | test.cpp:5:25:5:28 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:4:24:4:27 | size | test.cpp:10:9:10:11 | arr | test.cpp:9:26:9:29 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:5:25:5:28 | size | test.cpp:10:9:10:11 | arr | test.cpp:5:25:5:28 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:5:25:5:28 | size | test.cpp:10:9:10:11 | arr | test.cpp:5:25:5:28 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:5:25:5:28 | size | test.cpp:10:9:10:11 | arr | test.cpp:9:26:9:29 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:9:26:9:29 | size | test.cpp:10:9:10:11 | arr | test.cpp:9:26:9:29 | size |
| test.cpp:4:17:4:22 | call to malloc | test.cpp:9:26:9:29 | size | test.cpp:10:9:10:11 | arr | test.cpp:9:26:9:29 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:55:16:55:19 | size | test.cpp:63:13:63:13 | p | test.cpp:55:5:55:19 | Store |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:55:16:55:19 | size | test.cpp:63:13:63:13 | p | test.cpp:55:16:55:19 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:55:16:55:19 | size | test.cpp:63:13:63:13 | p | test.cpp:55:16:55:19 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:55:16:55:19 | size | test.cpp:63:13:63:13 | p | test.cpp:56:20:56:23 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:56:20:56:23 | size | test.cpp:63:13:63:13 | p | test.cpp:56:20:56:23 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:56:20:56:23 | size | test.cpp:63:13:63:13 | p | test.cpp:56:20:56:23 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:58:29:58:32 | size | test.cpp:63:13:63:13 | p | test.cpp:58:29:58:32 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:58:29:58:32 | size | test.cpp:63:13:63:13 | p | test.cpp:58:29:58:32 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:62:30:62:33 | size | test.cpp:63:13:63:13 | p | test.cpp:62:30:62:33 | size |
| test.cpp:56:13:56:18 | call to malloc | test.cpp:62:30:62:33 | size | test.cpp:63:13:63:13 | p | test.cpp:62:30:62:33 | size |
| test.cpp:70:14:70:19 | call to malloc | test.cpp:69:17:69:20 | size | test.cpp:83:14:83:14 | p | test.cpp:82:31:82:34 | size |
| test.cpp:70:14:70:19 | call to malloc | test.cpp:69:17:69:20 | size | test.cpp:93:14:93:14 | p | test.cpp:88:30:88:33 | size |
| test.cpp:70:14:70:19 | call to malloc | test.cpp:69:17:69:20 | size | test.cpp:93:14:93:14 | p | test.cpp:92:31:92:34 | size |

View File

@@ -0,0 +1 @@
experimental/Likely Bugs/ArrayAccessProductFlow.ql

View File

@@ -0,0 +1,110 @@
char *malloc(int size);
void test1(int size) {
char *arr = malloc(size);
for (int i = 0; i < size; i++) {
arr[i] = 0; // GOOD
}
for (int i = 0; i <= size; i++) {
arr[i] = i; // BAD
}
}
typedef struct {
int size;
char *p;
} array_t;
array_t mk_array(int size) {
array_t arr;
arr.size = size;
arr.p = malloc(size);
return arr;
}
void test2(int size) {
array_t arr = mk_array(size);
for (int i = 0; i < arr.size; i++) {
arr.p[i] = 0; // GOOD
}
for (int i = 0; i <= arr.size; i++) {
arr.p[i] = i; // BAD [NOT DETECTED]
}
}
void test3_callee(array_t arr) {
for (int i = 0; i < arr.size; i++) {
arr.p[i] = 0; // GOOD
}
for (int i = 0; i <= arr.size; i++) {
arr.p[i] = i; // BAD [NOT DETECTED]
}
}
void test3(int size) {
test3_callee(mk_array(size));
}
void test4(int size) {
array_t arr;
arr.size = size;
arr.p = malloc(size);
for (int i = 0; i < arr.size; i++) {
arr.p[i] = 0; // GOOD
}
for (int i = 0; i <= arr.size; i++) {
arr.p[i] = i; // BAD
}
}
array_t *mk_array_p(int size) {
array_t *arr = (array_t*) malloc(sizeof(array_t));
arr->size = size;
arr->p = malloc(size);
return arr;
}
void test5(int size) {
array_t *arr = mk_array_p(size);
for (int i = 0; i < arr->size; i++) {
arr->p[i] = 0; // GOOD
}
for (int i = 0; i <= arr->size; i++) {
arr->p[i] = i; // BAD
}
}
void test6_callee(array_t *arr) {
for (int i = 0; i < arr->size; i++) {
arr->p[i] = 0; // GOOD
}
for (int i = 0; i <= arr->size; i++) {
arr->p[i] = i; // BAD
}
}
void test6(int size) {
test6_callee(mk_array_p(size));
}
void test7(int size) {
char *arr = malloc(size);
for (char *p = arr; p < arr + size; p++) {
*p = 0; // GOOD
}
for (char *p = arr; p <= arr + size; p++) {
*p = 0; // BAD [NOT DETECTED]
}
}

View File

@@ -0,0 +1,88 @@
// semmle-extractor-options: --clang --clang_version 100000
struct S {
void f() {}
int o;
};
using f_type = decltype(&S::f);
using o_type = decltype(&S::o);
struct T;
bool b_is_same1 = __is_same(int, int);
bool b_is_same2 = __is_same(int, float);
bool b_is_function1 = __is_function(void(int));
bool b_is_function2 = __is_function(int);
bool b_is_array1 = __is_array(int[]);
bool b_is_array2 = __is_array(int);
unsigned long b_array_rank1 = __array_rank(int[42][42]);
unsigned long b_array_rank2 = __array_rank(int);
unsigned long b_array_extent1 = __array_extent(int[42][42], 1);
unsigned long b_array_extent2 = __array_extent(int[42][42], 2);
unsigned long b_array_extent3 = __array_extent(int, 0);
bool bok_is_arithmetic1 = __is_arithmetic(S);
bool bok_is_arithmetic2 = __is_arithmetic(int);
bool bok_is_complete_type1 = __is_complete_type(S);
bool bok_is_complete_type2 = __is_complete_type(T);
bool bok_is_compound1 = __is_compound(S);
bool bok_is_compound2 = __is_compound(int);
bool bok_is_const1 = __is_const(const int);
bool bok_is_const2 = __is_const(int);
bool bok_is_floating_point1 = __is_floating_point(int);
bool bok_is_floating_point2 = __is_floating_point(float);
bool bok_is_fundamental1 = __is_fundamental(S);
bool bok_is_fundamental2 = __is_fundamental(int);
bool bok_is_integral1 = __is_integral(float);
bool bok_is_integral2 = __is_integral(int);
bool bok_is_lvalue_reference1 = __is_lvalue_reference(int&);
bool bok_is_lvalue_reference2 = __is_lvalue_reference(int);
bool bok_is_member_function_pointer1 = __is_member_function_pointer(f_type);
bool bok_is_member_function_pointer2 = __is_member_function_pointer(o_type);
bool bok_is_member_object_pointer1 = __is_member_object_pointer(f_type);
bool bok_is_member_object_pointer2 = __is_member_object_pointer(o_type);
bool bok_is_member_pointer1 = __is_member_pointer(f_type);
bool bok_is_member_pointer2 = __is_member_pointer(o_type);
bool bok_is_member_pointer3 = __is_member_pointer(int);
bool bok_is_object1 = __is_object(int);
bool bok_is_object2 = __is_object(int&);
bool bok_is_pointer1 = __is_pointer(int);
bool bok_is_pointer2 = __is_pointer(int*);
bool bok_is_reference1 = __is_reference(int);
bool bok_is_reference2 = __is_reference(int&);
bool bok_is_rvalue_reference1 = __is_rvalue_reference(int&&);
bool bok_is_rvalue_reference2 = __is_rvalue_reference(int);
bool bok_is_scalar1 = __is_scalar(int);
bool bok_is_scalar2 = __is_scalar(int[]);
bool bok_is_signed1 = __is_signed(int);
bool bok_is_signed2 = __is_signed(unsigned int);
bool bok_is_unsigned1 = __is_unsigned(int);
bool bok_is_unsigned2 = __is_unsigned(unsigned int);
bool bok_is_void1 = __is_void(void);
bool bok_is_void2 = __is_void(int);
bool bok_is_volatile1 = __is_volatile(volatile int);
bool bok_is_volatile2 = __is_volatile(int);

View File

@@ -1,3 +1,126 @@
| clang.cpp:8:25:8:29 | f | | <none> |
| clang.cpp:9:25:9:29 | o | | <none> |
| clang.cpp:13:19:13:37 | __is_same | int,int | 1 |
| clang.cpp:13:19:13:37 | int | | <none> |
| clang.cpp:13:19:13:37 | int | | <none> |
| clang.cpp:14:19:14:39 | __is_same | int,float | 0 |
| clang.cpp:14:19:14:39 | float | | <none> |
| clang.cpp:14:19:14:39 | int | | <none> |
| clang.cpp:16:23:16:46 | ..()(..) | | <none> |
| clang.cpp:16:23:16:46 | __is_function | ..()(..) | 1 |
| clang.cpp:17:23:17:40 | __is_function | int | 0 |
| clang.cpp:17:23:17:40 | int | | <none> |
| clang.cpp:19:20:19:36 | __is_array | int[] | 1 |
| clang.cpp:19:20:19:36 | int[] | | <none> |
| clang.cpp:20:20:20:34 | __is_array | int | 0 |
| clang.cpp:20:20:20:34 | int | | <none> |
| clang.cpp:22:31:22:55 | __array_rank | int[42][42] | 2 |
| clang.cpp:22:31:22:55 | int[42][42] | | <none> |
| clang.cpp:22:48:22:49 | 42 | | 42 |
| clang.cpp:22:48:22:49 | (unsigned long)... | | 42 |
| clang.cpp:22:52:22:53 | 42 | | 42 |
| clang.cpp:22:52:22:53 | (unsigned long)... | | 42 |
| clang.cpp:23:31:23:47 | __array_rank | int | 0 |
| clang.cpp:23:31:23:47 | int | | <none> |
| clang.cpp:25:33:25:62 | __array_extent | int[42][42],1 | 42 |
| clang.cpp:25:33:25:62 | int[42][42] | | <none> |
| clang.cpp:25:52:25:53 | 42 | | 42 |
| clang.cpp:25:52:25:53 | (unsigned long)... | | 42 |
| clang.cpp:25:56:25:57 | 42 | | 42 |
| clang.cpp:25:56:25:57 | (unsigned long)... | | 42 |
| clang.cpp:25:61:25:61 | 1 | | 1 |
| clang.cpp:26:33:26:62 | __array_extent | int[42][42],2 | 0 |
| clang.cpp:26:33:26:62 | int[42][42] | | <none> |
| clang.cpp:26:52:26:53 | 42 | | 42 |
| clang.cpp:26:52:26:53 | (unsigned long)... | | 42 |
| clang.cpp:26:56:26:57 | 42 | | 42 |
| clang.cpp:26:56:26:57 | (unsigned long)... | | 42 |
| clang.cpp:26:61:26:61 | 2 | | 2 |
| clang.cpp:27:33:27:54 | __array_extent | int,0 | 0 |
| clang.cpp:27:33:27:54 | int | | <none> |
| clang.cpp:27:53:27:53 | 0 | | 0 |
| clang.cpp:29:27:29:44 | S | | <none> |
| clang.cpp:29:27:29:44 | __is_arithmetic | S | 0 |
| clang.cpp:30:27:30:46 | __is_arithmetic | int | 1 |
| clang.cpp:30:27:30:46 | int | | <none> |
| clang.cpp:32:30:32:50 | S | | <none> |
| clang.cpp:32:30:32:50 | __is_complete_type | S | 1 |
| clang.cpp:33:30:33:50 | T | | <none> |
| clang.cpp:33:30:33:50 | __is_complete_type | T | 0 |
| clang.cpp:35:25:35:40 | S | | <none> |
| clang.cpp:35:25:35:40 | __is_compound | S | 1 |
| clang.cpp:36:25:36:42 | __is_compound | int | 0 |
| clang.cpp:36:25:36:42 | int | | <none> |
| clang.cpp:38:22:38:42 | __is_const | const int | 1 |
| clang.cpp:38:22:38:42 | const int | | <none> |
| clang.cpp:39:22:39:36 | __is_const | int | 0 |
| clang.cpp:39:22:39:36 | int | | <none> |
| clang.cpp:41:31:41:54 | __is_floating_point | int | 0 |
| clang.cpp:41:31:41:54 | int | | <none> |
| clang.cpp:42:31:42:56 | __is_floating_point | float | 1 |
| clang.cpp:42:31:42:56 | float | | <none> |
| clang.cpp:44:28:44:46 | S | | <none> |
| clang.cpp:44:28:44:46 | __is_fundamental | S | 0 |
| clang.cpp:45:28:45:48 | __is_fundamental | int | 1 |
| clang.cpp:45:28:45:48 | int | | <none> |
| clang.cpp:47:25:47:44 | __is_integral | float | 0 |
| clang.cpp:47:25:47:44 | float | | <none> |
| clang.cpp:48:25:48:42 | __is_integral | int | 1 |
| clang.cpp:48:25:48:42 | int | | <none> |
| clang.cpp:50:33:50:59 | __is_lvalue_reference | int & | 1 |
| clang.cpp:50:33:50:59 | int & | | <none> |
| clang.cpp:51:33:51:58 | __is_lvalue_reference | int | 0 |
| clang.cpp:51:33:51:58 | int | | <none> |
| clang.cpp:53:40:53:75 | __is_member_function_pointer | f_type | 1 |
| clang.cpp:53:40:53:75 | f_type | | <none> |
| clang.cpp:54:40:54:75 | __is_member_function_pointer | o_type | 0 |
| clang.cpp:54:40:54:75 | o_type | | <none> |
| clang.cpp:56:38:56:71 | __is_member_object_pointer | f_type | 0 |
| clang.cpp:56:38:56:71 | f_type | | <none> |
| clang.cpp:57:38:57:71 | __is_member_object_pointer | o_type | 1 |
| clang.cpp:57:38:57:71 | o_type | | <none> |
| clang.cpp:59:31:59:57 | __is_member_pointer | f_type | 1 |
| clang.cpp:59:31:59:57 | f_type | | <none> |
| clang.cpp:60:31:60:57 | __is_member_pointer | o_type | 1 |
| clang.cpp:60:31:60:57 | o_type | | <none> |
| clang.cpp:61:31:61:54 | __is_member_pointer | int | 0 |
| clang.cpp:61:31:61:54 | int | | <none> |
| clang.cpp:63:23:63:38 | __is_object | int | 1 |
| clang.cpp:63:23:63:38 | int | | <none> |
| clang.cpp:64:23:64:39 | __is_object | int & | 0 |
| clang.cpp:64:23:64:39 | int & | | <none> |
| clang.cpp:66:24:66:40 | __is_pointer | int | 0 |
| clang.cpp:66:24:66:40 | int | | <none> |
| clang.cpp:67:24:67:41 | __is_pointer | int * | 1 |
| clang.cpp:67:24:67:41 | int * | | <none> |
| clang.cpp:69:26:69:44 | __is_reference | int | 0 |
| clang.cpp:69:26:69:44 | int | | <none> |
| clang.cpp:70:26:70:45 | __is_reference | int & | 1 |
| clang.cpp:70:26:70:45 | int & | | <none> |
| clang.cpp:72:33:72:60 | __is_rvalue_reference | int && | 1 |
| clang.cpp:72:33:72:60 | int && | | <none> |
| clang.cpp:73:33:73:58 | __is_rvalue_reference | int | 0 |
| clang.cpp:73:33:73:58 | int | | <none> |
| clang.cpp:75:23:75:38 | __is_scalar | int | 1 |
| clang.cpp:75:23:75:38 | int | | <none> |
| clang.cpp:76:23:76:40 | __is_scalar | int[] | 0 |
| clang.cpp:76:23:76:40 | int[] | | <none> |
| clang.cpp:78:23:78:38 | __is_signed | int | 1 |
| clang.cpp:78:23:78:38 | int | | <none> |
| clang.cpp:79:23:79:47 | __is_signed | unsigned int | 0 |
| clang.cpp:79:23:79:47 | unsigned int | | <none> |
| clang.cpp:81:25:81:42 | __is_unsigned | int | 0 |
| clang.cpp:81:25:81:42 | int | | <none> |
| clang.cpp:82:25:82:51 | __is_unsigned | unsigned int | 1 |
| clang.cpp:82:25:82:51 | unsigned int | | <none> |
| clang.cpp:84:21:84:35 | __is_void | void | 1 |
| clang.cpp:84:21:84:35 | void | | <none> |
| clang.cpp:85:21:85:34 | __is_void | int | 0 |
| clang.cpp:85:21:85:34 | int | | <none> |
| clang.cpp:87:25:87:51 | __is_volatile | volatile int | 1 |
| clang.cpp:87:25:87:51 | volatile int | | <none> |
| clang.cpp:88:25:88:42 | __is_volatile | int | 0 |
| clang.cpp:88:25:88:42 | int | | <none> |
| file://:0:0:0:0 | 0 | | 0 |
| file://:0:0:0:0 | 1 | | 1 |
| file://:0:0:0:0 | 2 | | 2 |
@@ -313,3 +436,15 @@
| ms.cpp:265:49:265:88 | int | | <none> |
| ms.cpp:266:49:266:90 | __has_unique_object_representations | float | 0 |
| ms.cpp:266:49:266:90 | float | | <none> |
| ms.cpp:268:36:268:68 | __is_layout_compatible | int,long | 0 |
| ms.cpp:268:36:268:68 | int | | <none> |
| ms.cpp:268:36:268:68 | long | | <none> |
| ms.cpp:269:36:269:75 | __is_layout_compatible | int *,int *const | 1 |
| ms.cpp:269:36:269:75 | int * | | <none> |
| ms.cpp:269:36:269:75 | int *const | | <none> |
| ms.cpp:271:51:271:101 | __is_pointer_interconvertible_base_of | empty,empty | 1 |
| ms.cpp:271:51:271:101 | empty | | <none> |
| ms.cpp:271:51:271:101 | empty | | <none> |
| ms.cpp:272:51:272:104 | __is_pointer_interconvertible_base_of | empty,abstract | 0 |
| ms.cpp:272:51:272:104 | abstract | | <none> |
| ms.cpp:272:51:272:104 | empty | | <none> |

View File

@@ -1,4 +1,4 @@
// semmle-extractor-options: --microsoft --microsoft_version 1600
class empty {
};
@@ -264,4 +264,10 @@ void f(void) {
bool b_has_unique_object_representations1 = __has_unique_object_representations(int);
bool b_has_unique_object_representations2 = __has_unique_object_representations(float);
bool b_is_layout_compatible1 = __is_layout_compatible(int, long);
bool b_is_layout_compatible2 = __is_layout_compatible(int*, int* const);
bool b_is_pointer_interconvertible_base_of1 = __is_pointer_interconvertible_base_of(empty, empty);
bool b_is_pointer_interconvertible_base_of2 = __is_pointer_interconvertible_base_of(empty, abstract);
}

View File

@@ -1 +0,0 @@
semmle-extractor-options: --microsoft --microsoft_version 1600

View File

@@ -14161,6 +14161,221 @@ ir.cpp:
# 1851| Type = [PointerType] const char *
# 1851| ValueCategory = prvalue
# 1852| getStmt(2): [ReturnStmt] return ...
# 1855| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&)
# 1855| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 1855| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&)
# 1855| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 1859| [CopyAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int> const&)
# 1859| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Bar1<int> &
# 1859| [MoveAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int>&&)
# 1859| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Bar1<int> &&
# 1862| [MemberFunction] void* missing_declaration_entries::Bar1<T>::missing_type_decl_entry(missing_declaration_entries::Bar1<T>::pointer)
# 1862| <params>:
# 1862| getParameter(0): [Parameter] p
# 1862| Type = [CTypedefType,NestedTypedefType] pointer
# 1862| getEntryPoint(): [BlockStmt] { ... }
# 1863| getStmt(0): [DeclStmt] declaration
# 1863| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res
# 1863| Type = [CTypedefType,LocalTypedefType] _Res
# 1864| getStmt(1): [ReturnStmt] return ...
# 1864| getExpr(): [VariableAccess] p
# 1864| Type = [CTypedefType,NestedTypedefType] pointer
# 1864| ValueCategory = prvalue(load)
# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)...
# 1864| Conversion = [PointerConversion] pointer conversion
# 1864| Type = [VoidPointerType] void *
# 1864| ValueCategory = prvalue
# 1862| [MemberFunction] void* missing_declaration_entries::Bar1<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer)
# 1862| <params>:
# 1862| getParameter(0): [Parameter] p
# 1862| Type = [CTypedefType,NestedTypedefType] pointer
# 1862| getEntryPoint(): [BlockStmt] { ... }
# 1863| getStmt(0): [DeclStmt] declaration
# 1864| getStmt(1): [ReturnStmt] return ...
# 1864| getExpr(): [VariableAccess] p
# 1864| Type = [CTypedefType,NestedTypedefType] pointer
# 1864| ValueCategory = prvalue(load)
# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)...
# 1864| Conversion = [PointerConversion] pointer conversion
# 1864| Type = [VoidPointerType] void *
# 1864| ValueCategory = prvalue
# 1868| [TopLevelFunction] void missing_declaration_entries::test1()
# 1868| <params>:
# 1868| getEntryPoint(): [BlockStmt] { ... }
# 1869| getStmt(0): [DeclStmt] declaration
# 1869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
# 1869| Type = [ClassTemplateInstantiation,Struct] Bar1<int>
# 1870| getStmt(1): [ExprStmt] ExprStmt
# 1870| getExpr(): [FunctionCall] call to missing_type_decl_entry
# 1870| Type = [VoidPointerType] void *
# 1870| ValueCategory = prvalue
# 1870| getQualifier(): [VariableAccess] b
# 1870| Type = [ClassTemplateInstantiation,Struct] Bar1<int>
# 1870| ValueCategory = lvalue
# 1870| getArgument(0): [Literal] 0
# 1870| Type = [NullPointerType] decltype(nullptr)
# 1870| Value = [Literal] 0
# 1870| ValueCategory = prvalue
# 1870| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)...
# 1870| Conversion = [PointerConversion] pointer conversion
# 1870| Type = [CTypedefType,NestedTypedefType] pointer
# 1870| Value = [CStyleCast] 0
# 1870| ValueCategory = prvalue
# 1871| getStmt(2): [ReturnStmt] return ...
# 1873| [CopyAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int> const&)
# 1873| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Bar2<int> &
# 1873| [MoveAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int>&&)
# 1873| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Bar2<int> &&
# 1875| [MemberFunction] int missing_declaration_entries::Bar2<T>::two_missing_variable_declaration_entries()
# 1875| <params>:
# 1875| getEntryPoint(): [BlockStmt] { ... }
# 1876| getStmt(0): [DeclStmt] declaration
# 1876| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
# 1876| Type = [ArrayType] int[10]
# 1876| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y
# 1876| Type = [ArrayType] int[10]
# 1877| getStmt(1): [ExprStmt] ExprStmt
# 1877| getExpr(): [AssignExpr] ... = ...
# 1877| Type = [IntType] int
# 1877| ValueCategory = lvalue
# 1877| getLValue(): [PointerDereferenceExpr] * ...
# 1877| Type = [IntType] int
# 1877| ValueCategory = lvalue
# 1877| getOperand(): [VariableAccess] x
# 1877| Type = [ArrayType] int[10]
# 1877| ValueCategory = lvalue
# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1877| Type = [IntPointerType] int *
# 1877| ValueCategory = prvalue
# 1877| getRValue(): [Literal] 10
# 1877| Type = [IntType] int
# 1877| Value = [Literal] 10
# 1877| ValueCategory = prvalue
# 1878| getStmt(2): [ExprStmt] ExprStmt
# 1878| getExpr(): [AssignExpr] ... = ...
# 1878| Type = [IntType] int
# 1878| ValueCategory = lvalue
# 1878| getLValue(): [PointerDereferenceExpr] * ...
# 1878| Type = [IntType] int
# 1878| ValueCategory = lvalue
# 1878| getOperand(): [VariableAccess] y
# 1878| Type = [ArrayType] int[10]
# 1878| ValueCategory = lvalue
# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1878| Type = [IntPointerType] int *
# 1878| ValueCategory = prvalue
# 1878| getRValue(): [Literal] 10
# 1878| Type = [IntType] int
# 1878| Value = [Literal] 10
# 1878| ValueCategory = prvalue
# 1879| getStmt(3): [ReturnStmt] return ...
# 1879| getExpr(): [AddExpr] ... + ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue
# 1879| getLeftOperand(): [PointerDereferenceExpr] * ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue(load)
# 1879| getOperand(): [VariableAccess] x
# 1879| Type = [ArrayType] int[10]
# 1879| ValueCategory = lvalue
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1879| Type = [IntPointerType] int *
# 1879| ValueCategory = prvalue
# 1879| getRightOperand(): [PointerDereferenceExpr] * ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue(load)
# 1879| getOperand(): [VariableAccess] y
# 1879| Type = [ArrayType] int[10]
# 1879| ValueCategory = lvalue
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1879| Type = [IntPointerType] int *
# 1879| ValueCategory = prvalue
# 1875| [MemberFunction] int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries()
# 1875| <params>:
# 1875| getEntryPoint(): [BlockStmt] { ... }
# 1876| getStmt(0): [DeclStmt] declaration
# 1877| getStmt(1): [ExprStmt] ExprStmt
# 1877| getExpr(): [AssignExpr] ... = ...
# 1877| Type = [IntType] int
# 1877| ValueCategory = lvalue
# 1877| getLValue(): [PointerDereferenceExpr] * ...
# 1877| Type = [IntType] int
# 1877| ValueCategory = lvalue
# 1877| getOperand(): [VariableAccess] x
# 1877| Type = [ArrayType] int[10]
# 1877| ValueCategory = lvalue
# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1877| Type = [IntPointerType] int *
# 1877| ValueCategory = prvalue
# 1877| getRValue(): [Literal] 10
# 1877| Type = [IntType] int
# 1877| Value = [Literal] 10
# 1877| ValueCategory = prvalue
# 1878| getStmt(2): [ExprStmt] ExprStmt
# 1878| getExpr(): [AssignExpr] ... = ...
# 1878| Type = [IntType] int
# 1878| ValueCategory = lvalue
# 1878| getLValue(): [PointerDereferenceExpr] * ...
# 1878| Type = [IntType] int
# 1878| ValueCategory = lvalue
# 1878| getOperand(): [VariableAccess] y
# 1878| Type = [ArrayType] int[10]
# 1878| ValueCategory = lvalue
# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1878| Type = [IntPointerType] int *
# 1878| ValueCategory = prvalue
# 1878| getRValue(): [Literal] 10
# 1878| Type = [IntType] int
# 1878| Value = [Literal] 10
# 1878| ValueCategory = prvalue
# 1879| getStmt(3): [ReturnStmt] return ...
# 1879| getExpr(): [AddExpr] ... + ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue
# 1879| getLeftOperand(): [PointerDereferenceExpr] * ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue(load)
# 1879| getOperand(): [VariableAccess] x
# 1879| Type = [ArrayType] int[10]
# 1879| ValueCategory = lvalue
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1879| Type = [IntPointerType] int *
# 1879| ValueCategory = prvalue
# 1879| getRightOperand(): [PointerDereferenceExpr] * ...
# 1879| Type = [IntType] int
# 1879| ValueCategory = prvalue(load)
# 1879| getOperand(): [VariableAccess] y
# 1879| Type = [ArrayType] int[10]
# 1879| ValueCategory = lvalue
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
# 1879| Type = [IntPointerType] int *
# 1879| ValueCategory = prvalue
# 1883| [TopLevelFunction] void missing_declaration_entries::test2()
# 1883| <params>:
# 1883| getEntryPoint(): [BlockStmt] { ... }
# 1884| getStmt(0): [DeclStmt] declaration
# 1884| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
# 1884| Type = [ClassTemplateInstantiation,Struct] Bar2<int>
# 1885| getStmt(1): [ExprStmt] ExprStmt
# 1885| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries
# 1885| Type = [IntType] int
# 1885| ValueCategory = prvalue
# 1885| getQualifier(): [VariableAccess] b
# 1885| Type = [ClassTemplateInstantiation,Struct] Bar2<int>
# 1885| ValueCategory = lvalue
# 1886| getStmt(2): [ReturnStmt] return ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -1851,4 +1851,39 @@ void magicvars() {
const char *strfunc = __func__;
}
namespace missing_declaration_entries {
struct S {};
template<typename A, typename B> struct pair{};
template<typename T> struct Bar1 {
typedef S* pointer;
void* missing_type_decl_entry(pointer p) {
typedef pair<pointer, bool> _Res;
return p;
}
};
void test1() {
Bar1<int> b;
b.missing_type_decl_entry(nullptr);
}
template<typename T> struct Bar2 {
int two_missing_variable_declaration_entries() {
int x[10], y[10];
*x = 10;
*y = 10;
return *x + *y;
}
};
void test2() {
Bar2<int> b;
b.two_missing_variable_declaration_entries();
}
}
// semmle-extractor-options: -std=c++17 --clang

View File

@@ -5303,10 +5303,10 @@
| ir.cpp:1077:39:1077:39 | Address | &:r1077_7 |
| ir.cpp:1077:39:1077:39 | Load | m1077_6 |
| ir.cpp:1077:39:1077:39 | SideEffect | m1077_8 |
| ir.cpp:1078:5:1078:5 | Address | &:r1078_1 |
| ir.cpp:1078:5:1078:5 | Address | &:r1078_7 |
| ir.cpp:1078:5:1078:5 | Address | &:r1078_15 |
| ir.cpp:1078:14:1078:14 | Address | &:r1078_33 |
| ir.cpp:1078:5:1082:5 | Address | &:r1078_1 |
| ir.cpp:1078:5:1082:5 | Address | &:r1078_7 |
| ir.cpp:1078:5:1082:5 | Address | &:r1078_15 |
| ir.cpp:1078:5:1082:5 | Address | &:r1078_33 |
| ir.cpp:1078:18:1078:18 | Address | &:r1078_2 |
| ir.cpp:1078:18:1078:18 | Address | &:r1078_8 |
| ir.cpp:1078:18:1078:18 | Address | &:r1078_16 |
@@ -5369,10 +5369,10 @@
| ir.cpp:1079:13:1079:13 | Load | m1078_40 |
| ir.cpp:1079:13:1079:17 | Condition | r1079_4 |
| ir.cpp:1079:17:1079:17 | Right | r1079_3 |
| ir.cpp:1084:5:1084:5 | Address | &:r1084_1 |
| ir.cpp:1084:5:1084:5 | Address | &:r1084_7 |
| ir.cpp:1084:5:1084:5 | Address | &:r1084_15 |
| ir.cpp:1084:21:1084:21 | Address | &:r1084_42 |
| ir.cpp:1084:5:1088:5 | Address | &:r1084_1 |
| ir.cpp:1084:5:1088:5 | Address | &:r1084_7 |
| ir.cpp:1084:5:1088:5 | Address | &:r1084_15 |
| ir.cpp:1084:5:1088:5 | Address | &:r1084_42 |
| ir.cpp:1084:25:1084:25 | Address | &:r1084_2 |
| ir.cpp:1084:25:1084:25 | Address | &:r1084_8 |
| ir.cpp:1084:25:1084:25 | Address | &:r1084_16 |
@@ -8650,6 +8650,97 @@
| ir.cpp:1851:17:1851:23 | Address | &:r1851_1 |
| ir.cpp:1851:27:1851:34 | StoreValue | r1851_3 |
| ir.cpp:1851:27:1851:34 | Unary | r1851_2 |
| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 |
| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 |
| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 |
| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 |
| ir.cpp:1862:15:1862:15 | Address | &:r1862_15 |
| ir.cpp:1862:15:1862:15 | ChiPartial | partial:m1862_3 |
| ir.cpp:1862:15:1862:15 | ChiTotal | total:m1862_2 |
| ir.cpp:1862:15:1862:15 | Load | m1862_6 |
| ir.cpp:1862:15:1862:15 | Load | m1864_5 |
| ir.cpp:1862:15:1862:15 | SideEffect | m1862_3 |
| ir.cpp:1862:15:1862:15 | SideEffect | m1862_8 |
| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 |
| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 |
| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 |
| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 |
| ir.cpp:1862:47:1862:47 | Load | m1862_10 |
| ir.cpp:1862:47:1862:47 | SideEffect | m1862_12 |
| ir.cpp:1864:13:1864:21 | Address | &:r1864_1 |
| ir.cpp:1864:20:1864:20 | Address | &:r1864_2 |
| ir.cpp:1864:20:1864:20 | Load | m1862_10 |
| ir.cpp:1864:20:1864:20 | StoreValue | r1864_4 |
| ir.cpp:1864:20:1864:20 | Unary | r1864_3 |
| ir.cpp:1868:10:1868:14 | ChiPartial | partial:m1868_3 |
| ir.cpp:1868:10:1868:14 | ChiTotal | total:m1868_2 |
| ir.cpp:1868:10:1868:14 | SideEffect | ~m1870_12 |
| ir.cpp:1869:19:1869:19 | Address | &:r1869_1 |
| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 |
| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 |
| ir.cpp:1870:9:1870:9 | Arg(this) | this:r1870_1 |
| ir.cpp:1870:9:1870:9 | ChiPartial | partial:m1870_9 |
| ir.cpp:1870:9:1870:9 | ChiTotal | total:m1869_2 |
| ir.cpp:1870:9:1870:9 | SideEffect | m1869_2 |
| ir.cpp:1870:11:1870:33 | CallTarget | func:r1870_2 |
| ir.cpp:1870:11:1870:33 | ChiPartial | partial:m1870_5 |
| ir.cpp:1870:11:1870:33 | ChiTotal | total:m1868_4 |
| ir.cpp:1870:11:1870:33 | SideEffect | ~m1868_4 |
| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 |
| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 |
| ir.cpp:1870:35:1870:41 | Arg(0) | 0:r1870_3 |
| ir.cpp:1870:35:1870:41 | ChiPartial | partial:m1870_11 |
| ir.cpp:1870:35:1870:41 | ChiTotal | total:m1870_6 |
| ir.cpp:1870:35:1870:41 | SideEffect | ~m1870_6 |
| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 |
| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 |
| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 |
| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 |
| ir.cpp:1875:13:1875:13 | Address | &:r1875_10 |
| ir.cpp:1875:13:1875:13 | ChiPartial | partial:m1875_3 |
| ir.cpp:1875:13:1875:13 | ChiTotal | total:m1875_2 |
| ir.cpp:1875:13:1875:13 | Load | m1875_6 |
| ir.cpp:1875:13:1875:13 | Load | m1879_9 |
| ir.cpp:1875:13:1875:13 | SideEffect | m1875_3 |
| ir.cpp:1875:13:1875:13 | SideEffect | m1875_8 |
| ir.cpp:1876:13:1876:29 | Address | &:r1876_1 |
| ir.cpp:1876:13:1876:29 | Address | &:r1876_3 |
| ir.cpp:1877:13:1877:14 | Address | &:r1877_4 |
| ir.cpp:1877:13:1877:19 | ChiPartial | partial:m1877_5 |
| ir.cpp:1877:13:1877:19 | ChiTotal | total:m1876_2 |
| ir.cpp:1877:14:1877:14 | Unary | r1877_2 |
| ir.cpp:1877:14:1877:14 | Unary | r1877_3 |
| ir.cpp:1877:18:1877:19 | StoreValue | r1877_1 |
| ir.cpp:1878:13:1878:14 | Address | &:r1878_4 |
| ir.cpp:1878:13:1878:19 | ChiPartial | partial:m1878_5 |
| ir.cpp:1878:13:1878:19 | ChiTotal | total:m1876_4 |
| ir.cpp:1878:14:1878:14 | Unary | r1878_2 |
| ir.cpp:1878:14:1878:14 | Unary | r1878_3 |
| ir.cpp:1878:18:1878:19 | StoreValue | r1878_1 |
| ir.cpp:1879:13:1879:27 | Address | &:r1879_1 |
| ir.cpp:1879:20:1879:21 | Left | r1879_4 |
| ir.cpp:1879:20:1879:21 | Load | m1877_5 |
| ir.cpp:1879:20:1879:26 | StoreValue | r1879_8 |
| ir.cpp:1879:21:1879:21 | Address | &:r1879_3 |
| ir.cpp:1879:21:1879:21 | Unary | r1879_2 |
| ir.cpp:1879:25:1879:26 | Load | m1878_5 |
| ir.cpp:1879:25:1879:26 | Right | r1879_7 |
| ir.cpp:1879:26:1879:26 | Address | &:r1879_6 |
| ir.cpp:1879:26:1879:26 | Unary | r1879_5 |
| ir.cpp:1883:10:1883:14 | ChiPartial | partial:m1883_3 |
| ir.cpp:1883:10:1883:14 | ChiTotal | total:m1883_2 |
| ir.cpp:1883:10:1883:14 | SideEffect | ~m1885_5 |
| ir.cpp:1884:19:1884:19 | Address | &:r1884_1 |
| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 |
| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 |
| ir.cpp:1885:9:1885:9 | Arg(this) | this:r1885_1 |
| ir.cpp:1885:9:1885:9 | ChiPartial | partial:m1885_7 |
| ir.cpp:1885:9:1885:9 | ChiTotal | total:m1884_2 |
| ir.cpp:1885:9:1885:9 | SideEffect | m1884_2 |
| ir.cpp:1885:11:1885:50 | CallTarget | func:r1885_2 |
| ir.cpp:1885:11:1885:50 | ChiPartial | partial:m1885_4 |
| ir.cpp:1885:11:1885:50 | ChiTotal | total:m1883_4 |
| ir.cpp:1885:11:1885:50 | SideEffect | ~m1883_4 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

View File

@@ -6,7 +6,6 @@ missingOperandType
duplicateChiOperand
sideEffectWithoutPrimary
instructionWithoutSuccessor
| ../../../include/memory.h:68:25:68:33 | CopyValue: (reference to) | Instruction 'CopyValue: (reference to)' has no successors in function '$@'. | ../../../include/memory.h:67:5:67:5 | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() |
ambiguousSuccessors
unexplainedLoop
unnecessaryPhiInstruction

View File

@@ -9932,6 +9932,108 @@ ir.cpp:
# 1849| v1849_5(void) = AliasedUse : ~m?
# 1849| v1849_6(void) = ExitFunction :
# 1862| void* missing_declaration_entries::Bar1<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer)
# 1862| Block 0
# 1862| v1862_1(void) = EnterFunction :
# 1862| mu1862_2(unknown) = AliasedDefinition :
# 1862| mu1862_3(unknown) = InitializeNonLocal :
# 1862| r1862_4(glval<unknown>) = VariableAddress[#this] :
# 1862| mu1862_5(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1862_4
# 1862| r1862_6(glval<Bar1<int>>) = Load[#this] : &:r1862_4, ~m?
# 1862| mu1862_7(Bar1<int>) = InitializeIndirection[#this] : &:r1862_6
# 1862| r1862_8(glval<S *>) = VariableAddress[p] :
# 1862| mu1862_9(S *) = InitializeParameter[p] : &:r1862_8
# 1862| r1862_10(S *) = Load[p] : &:r1862_8, ~m?
# 1862| mu1862_11(unknown) = InitializeIndirection[p] : &:r1862_10
# 1864| r1864_1(glval<void *>) = VariableAddress[#return] :
# 1864| r1864_2(glval<S *>) = VariableAddress[p] :
# 1864| r1864_3(S *) = Load[p] : &:r1864_2, ~m?
# 1864| r1864_4(void *) = Convert : r1864_3
# 1864| mu1864_5(void *) = Store[#return] : &:r1864_1, r1864_4
# 1862| v1862_12(void) = ReturnIndirection[#this] : &:r1862_6, ~m?
# 1862| v1862_13(void) = ReturnIndirection[p] : &:r1862_10, ~m?
# 1862| r1862_14(glval<void *>) = VariableAddress[#return] :
# 1862| v1862_15(void) = ReturnValue : &:r1862_14, ~m?
# 1862| v1862_16(void) = AliasedUse : ~m?
# 1862| v1862_17(void) = ExitFunction :
# 1868| void missing_declaration_entries::test1()
# 1868| Block 0
# 1868| v1868_1(void) = EnterFunction :
# 1868| mu1868_2(unknown) = AliasedDefinition :
# 1868| mu1868_3(unknown) = InitializeNonLocal :
# 1869| r1869_1(glval<Bar1<int>>) = VariableAddress[b] :
# 1869| mu1869_2(Bar1<int>) = Uninitialized[b] : &:r1869_1
# 1870| r1870_1(glval<Bar1<int>>) = VariableAddress[b] :
# 1870| r1870_2(glval<unknown>) = FunctionAddress[missing_type_decl_entry] :
# 1870| r1870_3(S *) = Constant[0] :
# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3
# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m?
# 1870| v1870_6(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, ~m?
# 1870| v1870_7(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m?
# 1870| mu1870_8(Bar1<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1
# 1870| mu1870_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3
# 1871| v1871_1(void) = NoOp :
# 1868| v1868_4(void) = ReturnVoid :
# 1868| v1868_5(void) = AliasedUse : ~m?
# 1868| v1868_6(void) = ExitFunction :
# 1875| int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries()
# 1875| Block 0
# 1875| v1875_1(void) = EnterFunction :
# 1875| mu1875_2(unknown) = AliasedDefinition :
# 1875| mu1875_3(unknown) = InitializeNonLocal :
# 1875| r1875_4(glval<unknown>) = VariableAddress[#this] :
# 1875| mu1875_5(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1875_4
# 1875| r1875_6(glval<Bar2<int>>) = Load[#this] : &:r1875_4, ~m?
# 1875| mu1875_7(Bar2<int>) = InitializeIndirection[#this] : &:r1875_6
# 1876| r1876_1(glval<int[10]>) = VariableAddress[x] :
# 1876| mu1876_2(int[10]) = Uninitialized[x] : &:r1876_1
# 1876| r1876_3(glval<int[10]>) = VariableAddress[y] :
# 1876| mu1876_4(int[10]) = Uninitialized[y] : &:r1876_3
# 1877| r1877_1(int) = Constant[10] :
# 1877| r1877_2(glval<int[10]>) = VariableAddress[x] :
# 1877| r1877_3(int *) = Convert : r1877_2
# 1877| r1877_4(glval<int>) = CopyValue : r1877_3
# 1877| mu1877_5(int) = Store[?] : &:r1877_4, r1877_1
# 1878| r1878_1(int) = Constant[10] :
# 1878| r1878_2(glval<int[10]>) = VariableAddress[y] :
# 1878| r1878_3(int *) = Convert : r1878_2
# 1878| r1878_4(glval<int>) = CopyValue : r1878_3
# 1878| mu1878_5(int) = Store[?] : &:r1878_4, r1878_1
# 1879| r1879_1(glval<int>) = VariableAddress[#return] :
# 1879| r1879_2(glval<int[10]>) = VariableAddress[x] :
# 1879| r1879_3(int *) = Convert : r1879_2
# 1879| r1879_4(int) = Load[?] : &:r1879_3, ~m?
# 1879| r1879_5(glval<int[10]>) = VariableAddress[y] :
# 1879| r1879_6(int *) = Convert : r1879_5
# 1879| r1879_7(int) = Load[?] : &:r1879_6, ~m?
# 1879| r1879_8(int) = Add : r1879_4, r1879_7
# 1879| mu1879_9(int) = Store[#return] : &:r1879_1, r1879_8
# 1875| v1875_8(void) = ReturnIndirection[#this] : &:r1875_6, ~m?
# 1875| r1875_9(glval<int>) = VariableAddress[#return] :
# 1875| v1875_10(void) = ReturnValue : &:r1875_9, ~m?
# 1875| v1875_11(void) = AliasedUse : ~m?
# 1875| v1875_12(void) = ExitFunction :
# 1883| void missing_declaration_entries::test2()
# 1883| Block 0
# 1883| v1883_1(void) = EnterFunction :
# 1883| mu1883_2(unknown) = AliasedDefinition :
# 1883| mu1883_3(unknown) = InitializeNonLocal :
# 1884| r1884_1(glval<Bar2<int>>) = VariableAddress[b] :
# 1884| mu1884_2(Bar2<int>) = Uninitialized[b] : &:r1884_1
# 1885| r1885_1(glval<Bar2<int>>) = VariableAddress[b] :
# 1885| r1885_2(glval<unknown>) = FunctionAddress[two_missing_variable_declaration_entries] :
# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1
# 1885| mu1885_4(unknown) = ^CallSideEffect : ~m?
# 1885| v1885_5(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, ~m?
# 1885| mu1885_6(Bar2<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1
# 1886| v1886_1(void) = NoOp :
# 1883| v1883_4(void) = ReturnVoid :
# 1883| v1883_5(void) = AliasedUse : ~m?
# 1883| v1883_6(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0

View File

@@ -1598,17 +1598,17 @@ postWithInFlow
| constmemberaccess.cpp:9:2:9:2 | i [post update] | PostUpdateNode should not be the target of local flow. |
| constructorinitializer.cpp:8:4:8:4 | Argument this [post update] | PostUpdateNode should not be the target of local flow. |
| constructorinitializer.cpp:8:4:8:4 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:6:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:6:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:6:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:16:6:17 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:8:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:8:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:8:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:6:5:8:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:7:7:7:8 | (reference dereference) [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:7:7:7:8 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:7:7:7:8 | el [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:28:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:28:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:28:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:16:28:17 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:30:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:30:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:30:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:5:30:5 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:21:28:21 | (__begin) [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:21:28:21 | (__begin) [post update] | PostUpdateNode should not be the target of local flow. |
| cpp11.cpp:28:21:28:21 | (__begin) [post update] | PostUpdateNode should not be the target of local flow. |
@@ -2644,10 +2644,10 @@ postWithInFlow
| stmt_expr.cpp:27:5:27:7 | ptr [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:4:16:4:30 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:5:14:5:28 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:11:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:11:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:11:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:10:11:12 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:13:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:13:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:13:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:3:13:3 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:16:11:16 | (__range) [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:16:11:16 | (__range) [post update] | PostUpdateNode should not be the target of local flow. |
| stream_it.cpp:11:16:11:16 | (__range) [post update] | PostUpdateNode should not be the target of local flow. |