Skip to content

Commit 8f85964

Browse files
authored
Merge pull request #20457 from aschackmull/shared/cfg-fix-joinblock-pred
Shared/Cfg: Fix missing JoinBlockPredecessor.
2 parents 51a33c2 + d93b2ed commit 8f85964

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6252,7 +6252,8 @@ joinBlockPredecessor
62526252
| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | 1 |
62536253
| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | 0 |
62546254
| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | 1 |
6255-
| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 0 |
6255+
| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 (normal) | 0 |
6256+
| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 1 |
62566257
| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | 1 |
62576258
| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | 0 |
62586259
| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | 0 |
@@ -6286,20 +6287,25 @@ joinBlockPredecessor
62866287
| case.rb:9:3:17:5 | case ... | case.rb:14:25:14:25 | 6 | 3 |
62876288
| case.rb:9:3:17:5 | case ... | case.rb:15:28:15:28 | 7 | 4 |
62886289
| case.rb:9:3:17:5 | case ... | case.rb:16:10:16:10 | 8 | 5 |
6289-
| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 0 |
6290-
| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 0 |
6291-
| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 0 |
6290+
| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | 0 |
6291+
| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 1 |
6292+
| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | 0 |
6293+
| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 1 |
6294+
| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | exit case_match_array (abnormal) | 0 |
6295+
| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 1 |
62926296
| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:5:37:27 | in ... then ... | 0 |
62936297
| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:8:37:26 | [ ..., * ] | 1 |
62946298
| case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | 0 |
62956299
| case.rb:33:3:38:5 | case ... | case.rb:35:9:35:9 | x | 1 |
62966300
| case.rb:33:3:38:5 | case ... | case.rb:36:9:36:9 | x | 2 |
62976301
| case.rb:33:3:38:5 | case ... | case.rb:37:25:37:25 | e | 3 |
6298-
| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 0 |
6302+
| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | 0 |
6303+
| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 1 |
62996304
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | enter case_match_find | 0 |
63006305
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:10:43:10 | x | 1 |
63016306
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:16:43:16 | 2 | 2 |
6302-
| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 0 |
6307+
| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | 0 |
6308+
| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 1 |
63036309
| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:5:51:17 | in ... then ... | 0 |
63046310
| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:8:51:16 | { ..., ** } | 1 |
63056311
| case.rb:48:3:52:5 | case ... | case.rb:49:29:49:32 | rest | 0 |
@@ -6315,7 +6321,8 @@ joinBlockPredecessor
63156321
| case.rb:56:3:60:5 | case ... | case.rb:58:5:58:10 | in ... then ... | 1 |
63166322
| case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | 0 |
63176323
| case.rb:64:3:66:5 | case ... | case.rb:65:12:65:12 | _ | 1 |
6318-
| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 0 |
6324+
| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | exit case_match_various (abnormal) | 0 |
6325+
| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 1 |
63196326
| case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | 0 |
63206327
| case.rb:72:3:92:5 | case ... | case.rb:74:5:74:11 | in ... then ... | 1 |
63216328
| case.rb:72:3:92:5 | case ... | case.rb:75:5:75:15 | in ... then ... | 2 |
@@ -6347,7 +6354,8 @@ joinBlockPredecessor
63476354
| case.rb:72:3:92:5 | case ... | case.rb:91:13:91:14 | "" | 28 |
63486355
| case.rb:72:3:92:5 | case ... | case.rb:91:18:91:19 | [ ..., * ] | 29 |
63496356
| case.rb:72:3:92:5 | case ... | case.rb:91:23:91:24 | { ..., ** } | 30 |
6350-
| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 0 |
6357+
| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | 0 |
6358+
| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 1 |
63516359
| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:19:19:19:32 | self | 0 |
63526360
| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:21:19:21:32 | self | 1 |
63536361
| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:15:42:24 | self | 0 |
@@ -6454,7 +6462,8 @@ joinBlockPredecessor
64546462
| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | 1 |
64556463
| raise.rb:7:1:12:3 | exit m1 | raise.rb:8:3:10:5 | if ... | 0 |
64566464
| raise.rb:7:1:12:3 | exit m1 | raise.rb:9:5:9:17 | self | 1 |
6457-
| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 0 |
6465+
| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | exit m2 (abnormal) | 0 |
6466+
| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 1 |
64586467
| raise.rb:22:3:22:15 | self | raise.rb:16:5:18:7 | if ... | 0 |
64596468
| raise.rb:22:3:22:15 | self | raise.rb:20:5:20:18 | self | 1 |
64606469
| raise.rb:33:3:33:15 | self | raise.rb:27:5:29:7 | if ... | 0 |
@@ -6463,25 +6472,30 @@ joinBlockPredecessor
64636472
| raise.rb:44:3:44:15 | self | raise.rb:39:7:39:22 | self | 1 |
64646473
| raise.rb:54:3:54:15 | self | raise.rb:49:5:51:7 | if ... | 0 |
64656474
| raise.rb:54:3:54:15 | self | raise.rb:50:7:50:22 | self | 1 |
6466-
| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 0 |
6475+
| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | exit m6 (abnormal) | 0 |
6476+
| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 1 |
64676477
| raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | 0 |
64686478
| raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | 1 |
64696479
| raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | 0 |
64706480
| raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | 1 |
6471-
| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 0 |
6481+
| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 (normal) | 0 |
6482+
| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 1 |
64726483
| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | 0 |
64736484
| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | 1 |
64746485
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:68:1:77:3 | enter m7 | 0 |
64756486
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:70:5:70:17 | self | 1 |
64766487
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:3:72:18 | elsif ... | 2 |
64776488
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:9:71:9 | x | 3 |
6478-
| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 0 |
6489+
| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 (normal) | 0 |
6490+
| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 1 |
64796491
| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | 0 |
64806492
| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | 1 |
64816493
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:79:1:92:3 | enter m8 | 0 |
64826494
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:83:7:83:19 | self | 1 |
64836495
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:5:85:20 | elsif ... | 2 |
64846496
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:11:84:11 | x | 3 |
6497+
| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (abnormal) | 1 |
6498+
| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (normal) | 0 |
64856499
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: exception] if ... | 0 |
64866500
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: exception] self | 2 |
64876501
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: return] self | 3 |
@@ -6520,6 +6534,8 @@ joinBlockPredecessor
65206534
| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:25:155:48 | ... if ... | 0 |
65216535
| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:14 | self | 1 |
65226536
| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:23 | ... unless ... | 0 |
6537+
| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (abnormal) | 1 |
6538+
| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (normal) | 0 |
65236539
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:175:14:175:14 | 1 | 0 |
65246540
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:177:14:177:14 | 2 | 1 |
65256541
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:180:12:180:12 | 3 | 2 |

shared/controlflow/codeql/controlflow/Cfg.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,12 @@ module MakeWithSplitting<
10201020
not jbp instanceof BasicBlocks::EntryBasicBlock and
10211021
id = idOfAstNode(jbp.getFirstNode().(AstCfgNode).getAstNode()) and
10221022
kind = 1
1023+
or
1024+
exists(AnnotatedExitNode aen |
1025+
jbp.getFirstNode() = aen and
1026+
id = idOfCfgScope(aen.getScope()) and
1027+
if aen.isNormal() then kind = 2 else kind = 3
1028+
)
10231029
}
10241030

10251031
string getSplitString(BasicBlocks::JoinPredecessorBasicBlock jbp) {

0 commit comments

Comments
 (0)