Skip to content

Commit c0b3a18

Browse files
committed
C++: No phi self-edges.
1 parent 7323d4e commit c0b3a18

File tree

3 files changed

+1
-35
lines changed

3 files changed

+1
-35
lines changed

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,7 @@ predicate fromPhiNode(SsaPhiNode nodeFrom, Node nodeTo) {
742742
fromPhiNodeToUse(phi, sv, bb1, i1, use)
743743
or
744744
exists(PhiNode phiTo |
745+
phi != phiTo and
745746
lastRefRedefExt(phi, _, _, phiTo) and
746747
nodeTo.(SsaPhiNode).getPhiNode() = phiTo
747748
)

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

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,6 @@ identityLocalStep
181181
| test.cpp:13:10:13:11 | t2 | Node steps to itself |
182182
| test.cpp:15:8:15:9 | t2 | Node steps to itself |
183183
| test.cpp:21:8:21:9 | t1 | Node steps to itself |
184-
| test.cpp:23:19:23:19 | Phi | Node steps to itself |
185-
| test.cpp:23:19:23:19 | Phi | Node steps to itself |
186-
| test.cpp:23:19:23:19 | Phi | Node steps to itself |
187-
| test.cpp:23:19:23:19 | Phi | Node steps to itself |
188184
| test.cpp:23:19:23:19 | i | Node steps to itself |
189185
| test.cpp:23:23:23:24 | t1 | Node steps to itself |
190186
| test.cpp:23:27:23:27 | i | Node steps to itself |
@@ -351,9 +347,6 @@ identityLocalStep
351347
| test.cpp:489:20:489:20 | s | Node steps to itself |
352348
| test.cpp:489:20:489:20 | s indirection | Node steps to itself |
353349
| test.cpp:490:9:490:17 | p_content | Node steps to itself |
354-
| test.cpp:497:10:497:16 | Phi | Node steps to itself |
355-
| test.cpp:497:10:497:16 | Phi | Node steps to itself |
356-
| test.cpp:497:10:497:16 | Phi | Node steps to itself |
357350
| test.cpp:498:9:498:14 | clean1 | Node steps to itself |
358351
| test.cpp:500:10:500:10 | x | Node steps to itself |
359352
| test.cpp:513:8:513:8 | x | Node steps to itself |
@@ -384,46 +377,34 @@ identityLocalStep
384377
| test.cpp:673:9:673:16 | ptr_to_s | Node steps to itself |
385378
| test.cpp:679:9:679:16 | ptr_to_s | Node steps to itself |
386379
| test.cpp:687:9:687:16 | ptr_to_s | Node steps to itself |
387-
| true_upon_entry.cpp:10:19:10:19 | Phi | Node steps to itself |
388380
| true_upon_entry.cpp:10:19:10:19 | i | Node steps to itself |
389381
| true_upon_entry.cpp:10:27:10:27 | i | Node steps to itself |
390382
| true_upon_entry.cpp:13:8:13:8 | x | Node steps to itself |
391-
| true_upon_entry.cpp:18:19:18:19 | Phi | Node steps to itself |
392-
| true_upon_entry.cpp:18:19:18:19 | Phi | Node steps to itself |
393-
| true_upon_entry.cpp:18:19:18:19 | Phi | Node steps to itself |
394383
| true_upon_entry.cpp:18:19:18:19 | i | Node steps to itself |
395384
| true_upon_entry.cpp:18:23:18:32 | iterations | Node steps to itself |
396385
| true_upon_entry.cpp:18:35:18:35 | i | Node steps to itself |
397386
| true_upon_entry.cpp:21:8:21:8 | x | Node steps to itself |
398-
| true_upon_entry.cpp:26:19:26:19 | Phi | Node steps to itself |
399387
| true_upon_entry.cpp:26:19:26:19 | i | Node steps to itself |
400388
| true_upon_entry.cpp:26:27:26:27 | i | Node steps to itself |
401389
| true_upon_entry.cpp:29:8:29:8 | x | Node steps to itself |
402-
| true_upon_entry.cpp:34:19:34:19 | Phi | Node steps to itself |
403390
| true_upon_entry.cpp:34:19:34:19 | i | Node steps to itself |
404391
| true_upon_entry.cpp:34:27:34:27 | i | Node steps to itself |
405392
| true_upon_entry.cpp:39:8:39:8 | x | Node steps to itself |
406-
| true_upon_entry.cpp:44:19:44:19 | Phi | Node steps to itself |
407393
| true_upon_entry.cpp:44:19:44:19 | i | Node steps to itself |
408394
| true_upon_entry.cpp:44:27:44:27 | i | Node steps to itself |
409395
| true_upon_entry.cpp:49:8:49:8 | x | Node steps to itself |
410-
| true_upon_entry.cpp:55:19:55:19 | Phi | Node steps to itself |
411396
| true_upon_entry.cpp:55:19:55:19 | i | Node steps to itself |
412397
| true_upon_entry.cpp:55:38:55:38 | i | Node steps to itself |
413398
| true_upon_entry.cpp:57:8:57:8 | x | Node steps to itself |
414-
| true_upon_entry.cpp:63:19:63:19 | Phi | Node steps to itself |
415399
| true_upon_entry.cpp:63:19:63:19 | i | Node steps to itself |
416400
| true_upon_entry.cpp:63:38:63:38 | i | Node steps to itself |
417401
| true_upon_entry.cpp:66:8:66:8 | x | Node steps to itself |
418-
| true_upon_entry.cpp:76:19:76:19 | Phi | Node steps to itself |
419402
| true_upon_entry.cpp:76:19:76:19 | i | Node steps to itself |
420403
| true_upon_entry.cpp:76:38:76:38 | i | Node steps to itself |
421404
| true_upon_entry.cpp:78:8:78:8 | x | Node steps to itself |
422-
| true_upon_entry.cpp:84:24:84:24 | Phi | Node steps to itself |
423405
| true_upon_entry.cpp:84:30:84:30 | i | Node steps to itself |
424406
| true_upon_entry.cpp:84:38:84:38 | i | Node steps to itself |
425407
| true_upon_entry.cpp:86:8:86:8 | x | Node steps to itself |
426-
| true_upon_entry.cpp:91:24:91:24 | Phi | Node steps to itself |
427408
| true_upon_entry.cpp:91:30:91:30 | i | Node steps to itself |
428409
| true_upon_entry.cpp:91:38:91:38 | i | Node steps to itself |
429410
| true_upon_entry.cpp:93:8:93:8 | x | Node steps to itself |

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ identityLocalStep
137137
| A.cpp:165:10:165:11 | l3 | Node steps to itself |
138138
| A.cpp:166:10:166:11 | l3 | Node steps to itself |
139139
| A.cpp:167:22:167:23 | l3 | Node steps to itself |
140-
| A.cpp:167:26:167:26 | Phi | Node steps to itself |
141140
| A.cpp:167:26:167:26 | l | Node steps to itself |
142141
| A.cpp:167:44:167:44 | l | Node steps to itself |
143142
| A.cpp:167:44:167:44 | l indirection | Node steps to itself |
@@ -361,30 +360,15 @@ identityLocalStep
361360
| realistic.cpp:27:12:27:12 | m | Node steps to itself |
362361
| realistic.cpp:32:13:32:13 | d | Node steps to itself |
363362
| realistic.cpp:32:17:32:19 | num | Node steps to itself |
364-
| realistic.cpp:33:11:33:11 | Phi | Node steps to itself |
365-
| realistic.cpp:33:11:33:11 | Phi | Node steps to itself |
366-
| realistic.cpp:33:11:33:11 | Phi | Node steps to itself |
367-
| realistic.cpp:33:11:33:11 | Phi | Node steps to itself |
368-
| realistic.cpp:33:11:33:11 | Phi | Node steps to itself |
369363
| realistic.cpp:33:11:33:11 | d | Node steps to itself |
370364
| realistic.cpp:33:16:33:16 | e | Node steps to itself |
371365
| realistic.cpp:36:12:36:22 | destination | Node steps to itself |
372366
| realistic.cpp:42:20:42:20 | o | Node steps to itself |
373367
| realistic.cpp:42:20:42:20 | o indirection | Node steps to itself |
374368
| realistic.cpp:42:20:42:20 | o indirection | Node steps to itself |
375-
| realistic.cpp:48:21:48:21 | Phi | Node steps to itself |
376-
| realistic.cpp:48:21:48:21 | Phi | Node steps to itself |
377-
| realistic.cpp:48:21:48:21 | Phi | Node steps to itself |
378-
| realistic.cpp:48:21:48:21 | Phi | Node steps to itself |
379369
| realistic.cpp:48:21:48:21 | i | Node steps to itself |
380370
| realistic.cpp:48:34:48:34 | i | Node steps to itself |
381371
| realistic.cpp:49:17:49:17 | i | Node steps to itself |
382-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
383-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
384-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
385-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
386-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
387-
| realistic.cpp:52:11:52:11 | Phi | Node steps to itself |
388372
| realistic.cpp:52:11:52:11 | i | Node steps to itself |
389373
| realistic.cpp:53:17:53:17 | i | Node steps to itself |
390374
| realistic.cpp:54:24:54:24 | i | Node steps to itself |

0 commit comments

Comments
 (0)