From e96cbeb00a984e9d95da4c0711dcbf1218f5f3a7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 14 Aug 2023 14:37:47 +0200 Subject: [PATCH] Ruby: Adjust locations of synthesized nodes --- .../codeql/ruby/ast/internal/Synthesis.qll | 32 +++++++++++-- .../test/library-tests/ast/ValueText.expected | 48 +++++++++---------- .../library-tests/ast/calls/calls.expected | 20 ++++---- .../ast/control/ConditionalExpr.expected | 12 ++--- .../ast/control/ControlExpr.expected | 12 ++--- .../controlflow/graph/Nodes.expected | 6 +-- .../dataflow/local/DataflowStep.expected | 30 ++++++------ .../dataflow/local/Nodes.expected | 18 +++---- .../dataflow/local/TaintStep.expected | 48 +++++++++---------- .../test/library-tests/variables/ssa.expected | 14 +++--- .../variables/varaccess.expected | 8 ++-- 11 files changed, 137 insertions(+), 111 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll index 9cd9b561513..f33fb647bf3 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll @@ -1276,13 +1276,19 @@ private module ForLoopDesugar { result.getParent() = getForLoopPatternChild(for) } + /** Holds if `n` is an access to variable `v` in the pattern of `for`. */ + pragma[nomagic] + private predicate forLoopVariableAccess(Ruby::For for, Ruby::AstNode n, VariableReal v) { + n = getForLoopPatternChild(for) and + access(n, v) + } + /** Holds if `v` is the `i`th iteration variable of `for`. */ private predicate forLoopVariable(Ruby::For for, VariableReal v, int i) { v = rank[i + 1](VariableReal v0, Ruby::AstNode n, Location l | - n = getForLoopPatternChild(for) and - l = n.getLocation() and - access(n, v0) + forLoopVariableAccess(for, n, v0) and + l = n.getLocation() | v0 order by l.getStartLine(), l.getStartColumn() ) @@ -1406,6 +1412,18 @@ private module ForLoopDesugar { ) } + pragma[nomagic] + private predicate isDesugaredInitNode(ForExpr for, Variable v, AstNode n) { + exists(StmtSequence seq, AssignExpr ae | + seq = for.getDesugared() and + n = seq.getStmt(_) and + ae = n.(IfExpr).getThen() and + v = ae.getLeftOperand().getAVariable() + ) + or + isDesugaredInitNode(for, v, n.getParent()) + } + private class ForLoopSynthesis extends Synthesis { final override predicate child(AstNode parent, int i, Child child) { forLoopSynthesis(parent, i, child) @@ -1425,6 +1443,14 @@ private module ForLoopDesugar { final override predicate excludeFromControlFlowTree(AstNode n) { n = any(ForExpr for).getBody() } + + final override predicate location(AstNode n, Location l) { + exists(ForExpr for, Ruby::AstNode access, Variable v | + forLoopVariableAccess(toTsFor(for), access, v) and + isDesugaredInitNode(for, v, n) and + l = access.getLocation() + ) + } } } diff --git a/ruby/ql/test/library-tests/ast/ValueText.expected b/ruby/ql/test/library-tests/ast/ValueText.expected index 0c0a78423cf..ff087d7d72d 100644 --- a/ruby/ql/test/library-tests/ast/ValueText.expected +++ b/ruby/ql/test/library-tests/ast/ValueText.expected @@ -10,8 +10,8 @@ exprValue | calls/calls.rb:26:7:26:7 | 1 | 1 | int | | calls/calls.rb:36:9:36:11 | 100 | 100 | int | | calls/calls.rb:36:14:36:16 | 200 | 200 | int | -| calls/calls.rb:226:1:228:3 | nil | nil | nil | -| calls/calls.rb:229:1:231:3 | nil | nil | nil | +| calls/calls.rb:226:5:226:5 | nil | nil | nil | +| calls/calls.rb:229:5:229:5 | nil | nil | nil | | calls/calls.rb:280:5:280:8 | :blah | :blah | symbol | | calls/calls.rb:281:5:281:8 | :blah | :blah | symbol | | calls/calls.rb:290:11:290:16 | "blah" | blah | string | @@ -59,12 +59,12 @@ exprValue | calls/calls.rb:322:31:322:31 | 1 | 1 | int | | calls/calls.rb:322:37:322:37 | 2 | 2 | int | | calls/calls.rb:330:31:330:37 | "error" | error | string | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | | calls/calls.rb:342:5:342:5 | 0 | 0 | int | +| calls/calls.rb:342:5:342:5 | nil | nil | nil | | calls/calls.rb:342:8:342:8 | 1 | 1 | int | +| calls/calls.rb:342:8:342:8 | nil | nil | nil | | calls/calls.rb:342:11:342:11 | 2 | 2 | int | +| calls/calls.rb:342:11:342:11 | nil | nil | nil | | calls/calls.rb:342:18:342:18 | 1 | 1 | int | | calls/calls.rb:342:20:342:20 | 2 | 2 | int | | calls/calls.rb:342:22:342:22 | 3 | 3 | int | @@ -335,24 +335,24 @@ exprValue | control/loops.rb:4:5:4:5 | 0 | 0 | int | | control/loops.rb:5:5:5:5 | 0 | 0 | int | | control/loops.rb:6:5:6:5 | 0 | 0 | int | -| control/loops.rb:9:1:12:3 | nil | nil | nil | +| control/loops.rb:9:5:9:5 | nil | nil | nil | | control/loops.rb:9:10:9:10 | 1 | 1 | int | | control/loops.rb:9:13:9:14 | 10 | 10 | int | -| control/loops.rb:16:1:19:3 | nil | nil | nil | +| control/loops.rb:16:5:16:5 | nil | nil | nil | | control/loops.rb:16:10:16:10 | 1 | 1 | int | | control/loops.rb:16:13:16:14 | 10 | 10 | int | -| control/loops.rb:22:1:25:3 | nil | nil | nil | -| control/loops.rb:22:1:25:3 | nil | nil | nil | | control/loops.rb:22:5:22:7 | 0 | 0 | int | +| control/loops.rb:22:5:22:7 | nil | nil | nil | | control/loops.rb:22:10:22:14 | 1 | 1 | int | +| control/loops.rb:22:10:22:14 | nil | nil | nil | | control/loops.rb:22:20:22:22 | :foo | :foo | symbol | | control/loops.rb:22:25:22:25 | 0 | 0 | int | | control/loops.rb:22:28:22:30 | :bar | :bar | symbol | | control/loops.rb:22:33:22:33 | 1 | 1 | int | -| control/loops.rb:28:1:32:3 | nil | nil | nil | -| control/loops.rb:28:1:32:3 | nil | nil | nil | | control/loops.rb:28:6:28:8 | 0 | 0 | int | +| control/loops.rb:28:6:28:8 | nil | nil | nil | | control/loops.rb:28:11:28:15 | 1 | 1 | int | +| control/loops.rb:28:11:28:15 | nil | nil | nil | | control/loops.rb:28:22:28:24 | :foo | :foo | symbol | | control/loops.rb:28:27:28:27 | 0 | 0 | int | | control/loops.rb:28:30:28:32 | :bar | :bar | symbol | @@ -376,7 +376,7 @@ exprValue | control/loops.rb:66:11:66:11 | y | 0 | int | | erb/template.html.erb:19:5:19:17 | "hello world" | hello world | string | | erb/template.html.erb:25:9:25:10 | "" | | string | -| erb/template.html.erb:27:6:31:8 | nil | nil | nil | +| erb/template.html.erb:27:10:27:10 | nil | nil | nil | | erb/template.html.erb:27:16:27:20 | "foo" | foo | string | | erb/template.html.erb:27:23:27:27 | "bar" | bar | string | | erb/template.html.erb:27:30:27:34 | "baz" | baz | string | @@ -946,8 +946,8 @@ exprCfgNodeValue | calls/calls.rb:26:7:26:7 | 1 | 1 | int | | calls/calls.rb:36:9:36:11 | 100 | 100 | int | | calls/calls.rb:36:14:36:16 | 200 | 200 | int | -| calls/calls.rb:226:1:228:3 | nil | nil | nil | -| calls/calls.rb:229:1:231:3 | nil | nil | nil | +| calls/calls.rb:226:5:226:5 | nil | nil | nil | +| calls/calls.rb:229:5:229:5 | nil | nil | nil | | calls/calls.rb:280:5:280:8 | :blah | :blah | symbol | | calls/calls.rb:281:5:281:8 | :blah | :blah | symbol | | calls/calls.rb:290:11:290:16 | "blah" | blah | string | @@ -995,12 +995,12 @@ exprCfgNodeValue | calls/calls.rb:322:31:322:31 | 1 | 1 | int | | calls/calls.rb:322:37:322:37 | 2 | 2 | int | | calls/calls.rb:330:31:330:37 | "error" | error | string | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | -| calls/calls.rb:342:1:344:3 | nil | nil | nil | | calls/calls.rb:342:5:342:5 | 0 | 0 | int | +| calls/calls.rb:342:5:342:5 | nil | nil | nil | | calls/calls.rb:342:8:342:8 | 1 | 1 | int | +| calls/calls.rb:342:8:342:8 | nil | nil | nil | | calls/calls.rb:342:11:342:11 | 2 | 2 | int | +| calls/calls.rb:342:11:342:11 | nil | nil | nil | | calls/calls.rb:342:18:342:18 | 1 | 1 | int | | calls/calls.rb:342:20:342:20 | 2 | 2 | int | | calls/calls.rb:342:22:342:22 | 3 | 3 | int | @@ -1243,24 +1243,24 @@ exprCfgNodeValue | control/loops.rb:4:5:4:5 | 0 | 0 | int | | control/loops.rb:5:5:5:5 | 0 | 0 | int | | control/loops.rb:6:5:6:5 | 0 | 0 | int | -| control/loops.rb:9:1:12:3 | nil | nil | nil | +| control/loops.rb:9:5:9:5 | nil | nil | nil | | control/loops.rb:9:10:9:10 | 1 | 1 | int | | control/loops.rb:9:13:9:14 | 10 | 10 | int | -| control/loops.rb:16:1:19:3 | nil | nil | nil | +| control/loops.rb:16:5:16:5 | nil | nil | nil | | control/loops.rb:16:10:16:10 | 1 | 1 | int | | control/loops.rb:16:13:16:14 | 10 | 10 | int | -| control/loops.rb:22:1:25:3 | nil | nil | nil | -| control/loops.rb:22:1:25:3 | nil | nil | nil | | control/loops.rb:22:5:22:7 | 0 | 0 | int | +| control/loops.rb:22:5:22:7 | nil | nil | nil | | control/loops.rb:22:10:22:14 | 1 | 1 | int | +| control/loops.rb:22:10:22:14 | nil | nil | nil | | control/loops.rb:22:20:22:22 | :foo | :foo | symbol | | control/loops.rb:22:25:22:25 | 0 | 0 | int | | control/loops.rb:22:28:22:30 | :bar | :bar | symbol | | control/loops.rb:22:33:22:33 | 1 | 1 | int | -| control/loops.rb:28:1:32:3 | nil | nil | nil | -| control/loops.rb:28:1:32:3 | nil | nil | nil | | control/loops.rb:28:6:28:8 | 0 | 0 | int | +| control/loops.rb:28:6:28:8 | nil | nil | nil | | control/loops.rb:28:11:28:15 | 1 | 1 | int | +| control/loops.rb:28:11:28:15 | nil | nil | nil | | control/loops.rb:28:22:28:24 | :foo | :foo | symbol | | control/loops.rb:28:27:28:27 | 0 | 0 | int | | control/loops.rb:28:30:28:32 | :bar | :bar | symbol | @@ -1284,7 +1284,7 @@ exprCfgNodeValue | control/loops.rb:66:11:66:11 | y | 0 | int | | erb/template.html.erb:19:5:19:17 | "hello world" | hello world | string | | erb/template.html.erb:25:9:25:10 | "" | | string | -| erb/template.html.erb:27:6:31:8 | nil | nil | nil | +| erb/template.html.erb:27:10:27:10 | nil | nil | nil | | erb/template.html.erb:27:16:27:20 | "foo" | foo | string | | erb/template.html.erb:27:23:27:27 | "bar" | bar | string | | erb/template.html.erb:27:30:27:34 | "baz" | baz | string | diff --git a/ruby/ql/test/library-tests/ast/calls/calls.expected b/ruby/ql/test/library-tests/ast/calls/calls.expected index ff8ef702c34..da4849487f0 100644 --- a/ruby/ql/test/library-tests/ast/calls/calls.expected +++ b/ruby/ql/test/library-tests/ast/calls/calls.expected @@ -250,14 +250,14 @@ callsWithReceiver | calls.rb:222:11:222:13 | call to foo | calls.rb:222:11:222:13 | self | | calls.rb:223:1:223:6 | call to bar | calls.rb:223:1:223:1 | X | | calls.rb:223:14:223:19 | call to foo | calls.rb:223:14:223:14 | X | -| calls.rb:226:1:228:3 | ! ... | calls.rb:226:1:228:3 | defined? ... | | calls.rb:226:1:228:3 | call to each | calls.rb:226:10:226:12 | call to bar | -| calls.rb:226:1:228:3 | defined? ... | calls.rb:226:1:228:3 | x | +| calls.rb:226:5:226:5 | ! ... | calls.rb:226:5:226:5 | defined? ... | +| calls.rb:226:5:226:5 | defined? ... | calls.rb:226:5:226:5 | x | | calls.rb:226:10:226:12 | call to bar | calls.rb:226:10:226:12 | self | | calls.rb:227:3:227:5 | call to baz | calls.rb:227:3:227:5 | self | -| calls.rb:229:1:231:3 | ! ... | calls.rb:229:1:231:3 | defined? ... | | calls.rb:229:1:231:3 | call to each | calls.rb:229:10:229:15 | call to bar | -| calls.rb:229:1:231:3 | defined? ... | calls.rb:229:1:231:3 | x | +| calls.rb:229:5:229:5 | ! ... | calls.rb:229:5:229:5 | defined? ... | +| calls.rb:229:5:229:5 | defined? ... | calls.rb:229:5:229:5 | x | | calls.rb:229:10:229:15 | call to bar | calls.rb:229:10:229:10 | X | | calls.rb:230:3:230:8 | call to baz | calls.rb:230:3:230:3 | X | | calls.rb:234:1:234:3 | call to foo | calls.rb:234:1:234:3 | self | @@ -378,17 +378,17 @@ callsWithReceiver | calls.rb:330:13:330:15 | call to bar | calls.rb:330:13:330:15 | self | | calls.rb:330:25:330:37 | call to print | calls.rb:330:25:330:37 | self | | calls.rb:338:3:338:13 | call to bar | calls.rb:338:3:338:13 | self | -| calls.rb:342:1:344:3 | ! ... | calls.rb:342:1:344:3 | defined? ... | -| calls.rb:342:1:344:3 | ! ... | calls.rb:342:1:344:3 | defined? ... | -| calls.rb:342:1:344:3 | ! ... | calls.rb:342:1:344:3 | defined? ... | | calls.rb:342:1:344:3 | * ... | calls.rb:342:1:344:3 | __synth__0__1 | | calls.rb:342:1:344:3 | call to each | calls.rb:342:16:342:33 | [...] | -| calls.rb:342:1:344:3 | defined? ... | calls.rb:342:1:344:3 | x | -| calls.rb:342:1:344:3 | defined? ... | calls.rb:342:1:344:3 | y | -| calls.rb:342:1:344:3 | defined? ... | calls.rb:342:1:344:3 | z | +| calls.rb:342:5:342:5 | ! ... | calls.rb:342:5:342:5 | defined? ... | | calls.rb:342:5:342:5 | call to [] | calls.rb:342:5:342:5 | __synth__3__1 | +| calls.rb:342:5:342:5 | defined? ... | calls.rb:342:5:342:5 | x | +| calls.rb:342:8:342:8 | ! ... | calls.rb:342:8:342:8 | defined? ... | | calls.rb:342:8:342:8 | call to [] | calls.rb:342:8:342:8 | __synth__3__1 | +| calls.rb:342:8:342:8 | defined? ... | calls.rb:342:8:342:8 | y | +| calls.rb:342:11:342:11 | ! ... | calls.rb:342:11:342:11 | defined? ... | | calls.rb:342:11:342:11 | call to [] | calls.rb:342:11:342:11 | __synth__3__1 | +| calls.rb:342:11:342:11 | defined? ... | calls.rb:342:11:342:11 | z | | calls.rb:342:16:342:33 | call to [] | calls.rb:342:16:342:33 | Array | | calls.rb:342:17:342:23 | call to [] | calls.rb:342:17:342:23 | Array | | calls.rb:342:26:342:32 | call to [] | calls.rb:342:26:342:32 | Array | diff --git a/ruby/ql/test/library-tests/ast/control/ConditionalExpr.expected b/ruby/ql/test/library-tests/ast/control/ConditionalExpr.expected index 67cee0cd160..db7cd1957fb 100644 --- a/ruby/ql/test/library-tests/ast/control/ConditionalExpr.expected +++ b/ruby/ql/test/library-tests/ast/control/ConditionalExpr.expected @@ -22,12 +22,12 @@ conditionalExprs | conditionals.rb:61:1:64:3 | if ... | IfExpr | conditionals.rb:61:4:61:8 | ... > ... | conditionals.rb:63:1:63:4 | else ... | false | | conditionals.rb:67:1:70:3 | if ... | IfExpr | conditionals.rb:67:4:67:8 | ... > ... | conditionals.rb:67:10:67:13 | then ... | true | | conditionals.rb:67:1:70:3 | if ... | IfExpr | conditionals.rb:67:4:67:8 | ... > ... | conditionals.rb:68:1:69:5 | else ... | false | -| loops.rb:9:1:12:3 | if ... | IfExpr | loops.rb:9:1:12:3 | ! ... | loops.rb:9:1:12:3 | ... = ... | true | -| loops.rb:16:1:19:3 | if ... | IfExpr | loops.rb:16:1:19:3 | ! ... | loops.rb:16:1:19:3 | ... = ... | true | -| loops.rb:22:1:25:3 | if ... | IfExpr | loops.rb:22:1:25:3 | ! ... | loops.rb:22:1:25:3 | ... = ... | true | -| loops.rb:22:1:25:3 | if ... | IfExpr | loops.rb:22:1:25:3 | ! ... | loops.rb:22:1:25:3 | ... = ... | true | -| loops.rb:28:1:32:3 | if ... | IfExpr | loops.rb:28:1:32:3 | ! ... | loops.rb:28:1:32:3 | ... = ... | true | -| loops.rb:28:1:32:3 | if ... | IfExpr | loops.rb:28:1:32:3 | ! ... | loops.rb:28:1:32:3 | ... = ... | true | +| loops.rb:9:5:9:5 | if ... | IfExpr | loops.rb:9:5:9:5 | ! ... | loops.rb:9:5:9:5 | ... = ... | true | +| loops.rb:16:5:16:5 | if ... | IfExpr | loops.rb:16:5:16:5 | ! ... | loops.rb:16:5:16:5 | ... = ... | true | +| loops.rb:22:5:22:7 | if ... | IfExpr | loops.rb:22:5:22:7 | ! ... | loops.rb:22:5:22:7 | ... = ... | true | +| loops.rb:22:10:22:14 | if ... | IfExpr | loops.rb:22:10:22:14 | ! ... | loops.rb:22:10:22:14 | ... = ... | true | +| loops.rb:28:6:28:8 | if ... | IfExpr | loops.rb:28:6:28:8 | ! ... | loops.rb:28:6:28:8 | ... = ... | true | +| loops.rb:28:11:28:15 | if ... | IfExpr | loops.rb:28:11:28:15 | ! ... | loops.rb:28:11:28:15 | ... = ... | true | ifExprs | conditionals.rb:10:1:12:3 | if ... | IfExpr | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | then ... | (none) | false | | conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | then ... | else ... | false | diff --git a/ruby/ql/test/library-tests/ast/control/ControlExpr.expected b/ruby/ql/test/library-tests/ast/control/ControlExpr.expected index 58e30085922..c4d09535ccf 100644 --- a/ruby/ql/test/library-tests/ast/control/ControlExpr.expected +++ b/ruby/ql/test/library-tests/ast/control/ControlExpr.expected @@ -27,15 +27,15 @@ | conditionals.rb:61:1:64:3 | if ... | IfExpr | | conditionals.rb:67:1:70:3 | if ... | IfExpr | | loops.rb:9:1:12:3 | for ... in ... | ForExpr | -| loops.rb:9:1:12:3 | if ... | IfExpr | +| loops.rb:9:5:9:5 | if ... | IfExpr | | loops.rb:16:1:19:3 | for ... in ... | ForExpr | -| loops.rb:16:1:19:3 | if ... | IfExpr | +| loops.rb:16:5:16:5 | if ... | IfExpr | | loops.rb:22:1:25:3 | for ... in ... | ForExpr | -| loops.rb:22:1:25:3 | if ... | IfExpr | -| loops.rb:22:1:25:3 | if ... | IfExpr | +| loops.rb:22:5:22:7 | if ... | IfExpr | +| loops.rb:22:10:22:14 | if ... | IfExpr | | loops.rb:28:1:32:3 | for ... in ... | ForExpr | -| loops.rb:28:1:32:3 | if ... | IfExpr | -| loops.rb:28:1:32:3 | if ... | IfExpr | +| loops.rb:28:6:28:8 | if ... | IfExpr | +| loops.rb:28:11:28:15 | if ... | IfExpr | | loops.rb:35:1:39:3 | while ... | WhileExpr | | loops.rb:42:1:45:3 | while ... | WhileExpr | | loops.rb:48:1:48:19 | ... while ... | WhileModifierExpr | diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index 42b7ed153d3..f7bc8a1b1e7 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -25,10 +25,10 @@ callsWithNoArguments | cfg.rb:60:17:60:17 | call to b | | cfg.rb:62:7:62:12 | * ... | | cfg.rb:62:17:62:27 | * ... | -| cfg.rb:90:1:93:3 | [false] ! ... | -| cfg.rb:90:1:93:3 | [true] ! ... | | cfg.rb:90:1:93:3 | call to each | -| cfg.rb:90:1:93:3 | defined? ... | +| cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:90:5:90:5 | defined? ... | | cfg.rb:98:10:98:15 | ** ... | | cfg.rb:98:30:98:35 | ** ... | | cfg.rb:138:17:138:23 | * ... | diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 064e9a5482e..cbba246c74b 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -2399,7 +2399,7 @@ | UseUseExplosion.rb:24:5:25:7 | use | UseUseExplosion.rb:1:1:26:3 | C | | local_dataflow.rb:1:1:7:3 | self (foo) | local_dataflow.rb:3:8:3:10 | self | | local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:1:1:7:3 | self (foo) | -| local_dataflow.rb:1:1:150:3 | | local_dataflow.rb:10:5:13:3 | x | +| local_dataflow.rb:1:1:150:3 | | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:1:1:150:3 | self (local_dataflow.rb) | local_dataflow.rb:49:1:53:3 | self | | local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:1:9:1:9 | a | | local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:2:7:2:7 | a | @@ -2426,44 +2426,44 @@ | local_dataflow.rb:9:9:9:15 | call to [] | local_dataflow.rb:9:1:9:5 | array | | local_dataflow.rb:9:9:9:15 | call to [] | local_dataflow.rb:9:1:9:15 | ... = ... | | local_dataflow.rb:10:5:13:3 | ... | local_dataflow.rb:10:1:13:3 | ... = ... | -| local_dataflow.rb:10:5:13:3 | ... = ... | local_dataflow.rb:10:5:13:3 | if ... | | local_dataflow.rb:10:5:13:3 | self | local_dataflow.rb:11:1:11:2 | self | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:15:1:17:3 | x | +| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | ... = ... | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | -| local_dataflow.rb:10:5:13:3 | nil | local_dataflow.rb:10:5:13:3 | ... = ... | -| local_dataflow.rb:10:5:13:3 | nil | local_dataflow.rb:10:5:13:3 | x | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:10:5:13:3 | phi | +| local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | +| local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:11:1:11:2 | [post] self | local_dataflow.rb:12:3:12:5 | self | | local_dataflow.rb:11:1:11:2 | self | local_dataflow.rb:12:3:12:5 | self | -| local_dataflow.rb:15:1:17:3 | ... = ... | local_dataflow.rb:15:1:17:3 | if ... | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:19:1:21:3 | x | +| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | ... = ... | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | -| local_dataflow.rb:15:1:17:3 | nil | local_dataflow.rb:15:1:17:3 | ... = ... | -| local_dataflow.rb:15:1:17:3 | nil | local_dataflow.rb:15:1:17:3 | x | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:15:1:17:3 | phi | +| local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | +| local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | -| local_dataflow.rb:19:1:21:3 | ... = ... | local_dataflow.rb:19:1:21:3 | if ... | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | ... = ... | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | -| local_dataflow.rb:19:1:21:3 | nil | local_dataflow.rb:19:1:21:3 | ... = ... | -| local_dataflow.rb:19:1:21:3 | nil | local_dataflow.rb:19:1:21:3 | x | -| local_dataflow.rb:19:1:21:3 | x | local_dataflow.rb:19:1:21:3 | phi | +| local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | +| local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:24:2:24:8 | break | local_dataflow.rb:23:1:25:3 | while ... | | local_dataflow.rb:24:8:24:8 | 5 | local_dataflow.rb:24:2:24:8 | break | diff --git a/ruby/ql/test/library-tests/dataflow/local/Nodes.expected b/ruby/ql/test/library-tests/dataflow/local/Nodes.expected index b6808099a0b..3b7dd05902d 100644 --- a/ruby/ql/test/library-tests/dataflow/local/Nodes.expected +++ b/ruby/ql/test/library-tests/dataflow/local/Nodes.expected @@ -831,23 +831,23 @@ arg | local_dataflow.rb:9:10:9:10 | 1 | local_dataflow.rb:9:9:9:15 | call to [] | position 0 | | local_dataflow.rb:9:12:9:12 | 2 | local_dataflow.rb:9:9:9:15 | call to [] | position 1 | | local_dataflow.rb:9:14:9:14 | 3 | local_dataflow.rb:9:9:9:15 | call to [] | position 2 | -| local_dataflow.rb:10:5:13:3 | defined? ... | local_dataflow.rb:10:5:13:3 | [false] ! ... | self | -| local_dataflow.rb:10:5:13:3 | defined? ... | local_dataflow.rb:10:5:13:3 | [true] ! ... | self | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:10:5:13:3 | defined? ... | self | | local_dataflow.rb:10:5:13:3 | { ... } | local_dataflow.rb:10:5:13:3 | call to each | block | +| local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [false] ! ... | self | +| local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [true] ! ... | self | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | defined? ... | self | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:10:5:13:3 | call to each | self | | local_dataflow.rb:11:1:11:2 | self | local_dataflow.rb:11:1:11:2 | call to do | self | | local_dataflow.rb:12:3:12:5 | self | local_dataflow.rb:12:3:12:5 | call to p | self | | local_dataflow.rb:12:5:12:5 | x | local_dataflow.rb:12:3:12:5 | call to p | position 0 | -| local_dataflow.rb:15:1:17:3 | defined? ... | local_dataflow.rb:15:1:17:3 | [false] ! ... | self | -| local_dataflow.rb:15:1:17:3 | defined? ... | local_dataflow.rb:15:1:17:3 | [true] ! ... | self | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:15:1:17:3 | defined? ... | self | | local_dataflow.rb:15:1:17:3 | { ... } | local_dataflow.rb:15:1:17:3 | call to each | block | +| local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [false] ! ... | self | +| local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [true] ! ... | self | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | defined? ... | self | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:15:1:17:3 | call to each | self | -| local_dataflow.rb:19:1:21:3 | defined? ... | local_dataflow.rb:19:1:21:3 | [false] ! ... | self | -| local_dataflow.rb:19:1:21:3 | defined? ... | local_dataflow.rb:19:1:21:3 | [true] ! ... | self | -| local_dataflow.rb:19:1:21:3 | x | local_dataflow.rb:19:1:21:3 | defined? ... | self | | local_dataflow.rb:19:1:21:3 | { ... } | local_dataflow.rb:19:1:21:3 | call to each | block | +| local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [false] ! ... | self | +| local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [true] ! ... | self | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | defined? ... | self | | local_dataflow.rb:19:10:19:14 | array | local_dataflow.rb:19:1:21:3 | call to each | self | | local_dataflow.rb:20:6:20:6 | x | local_dataflow.rb:20:6:20:10 | ... > ... | self | | local_dataflow.rb:20:10:20:10 | 1 | local_dataflow.rb:20:6:20:10 | ... > ... | position 0 | diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index 62e839d3251..237c067be1b 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2842,7 +2842,7 @@ | local_dataflow.rb:1:1:7:3 | self (foo) | local_dataflow.rb:3:8:3:10 | self | | local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:1:1:7:3 | self (foo) | | local_dataflow.rb:1:1:7:3 | synthetic *args | local_dataflow.rb:1:9:1:9 | a | -| local_dataflow.rb:1:1:150:3 | | local_dataflow.rb:10:5:13:3 | x | +| local_dataflow.rb:1:1:150:3 | | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:1:1:150:3 | self (local_dataflow.rb) | local_dataflow.rb:49:1:53:3 | self | | local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:1:9:1:9 | a | | local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:2:7:2:7 | a | @@ -2872,56 +2872,56 @@ | local_dataflow.rb:9:9:9:15 | call to [] | local_dataflow.rb:9:1:9:5 | array | | local_dataflow.rb:9:9:9:15 | call to [] | local_dataflow.rb:9:1:9:15 | ... = ... | | local_dataflow.rb:10:5:13:3 | ... | local_dataflow.rb:10:1:13:3 | ... = ... | -| local_dataflow.rb:10:5:13:3 | ... = ... | local_dataflow.rb:10:5:13:3 | if ... | | local_dataflow.rb:10:5:13:3 | self | local_dataflow.rb:11:1:11:2 | self | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:15:1:17:3 | x | +| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | ... = ... | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | -| local_dataflow.rb:10:5:13:3 | defined? ... | local_dataflow.rb:10:5:13:3 | [false] ! ... | -| local_dataflow.rb:10:5:13:3 | defined? ... | local_dataflow.rb:10:5:13:3 | [true] ! ... | -| local_dataflow.rb:10:5:13:3 | nil | local_dataflow.rb:10:5:13:3 | ... = ... | -| local_dataflow.rb:10:5:13:3 | nil | local_dataflow.rb:10:5:13:3 | x | | local_dataflow.rb:10:5:13:3 | synthetic *args | local_dataflow.rb:10:5:13:3 | __synth__0__1 | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:10:5:13:3 | defined? ... | -| local_dataflow.rb:10:5:13:3 | x | local_dataflow.rb:10:5:13:3 | phi | +| local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [false] ! ... | +| local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [true] ! ... | +| local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | +| local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | defined? ... | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:11:1:11:2 | [post] self | local_dataflow.rb:12:3:12:5 | self | | local_dataflow.rb:11:1:11:2 | self | local_dataflow.rb:12:3:12:5 | self | -| local_dataflow.rb:15:1:17:3 | ... = ... | local_dataflow.rb:15:1:17:3 | if ... | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:19:1:21:3 | x | +| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | ... = ... | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | -| local_dataflow.rb:15:1:17:3 | defined? ... | local_dataflow.rb:15:1:17:3 | [false] ! ... | -| local_dataflow.rb:15:1:17:3 | defined? ... | local_dataflow.rb:15:1:17:3 | [true] ! ... | -| local_dataflow.rb:15:1:17:3 | nil | local_dataflow.rb:15:1:17:3 | ... = ... | -| local_dataflow.rb:15:1:17:3 | nil | local_dataflow.rb:15:1:17:3 | x | | local_dataflow.rb:15:1:17:3 | synthetic *args | local_dataflow.rb:15:1:17:3 | __synth__0__1 | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:15:1:17:3 | defined? ... | -| local_dataflow.rb:15:1:17:3 | x | local_dataflow.rb:15:1:17:3 | phi | +| local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [false] ! ... | +| local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [true] ! ... | +| local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | +| local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | defined? ... | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | -| local_dataflow.rb:19:1:21:3 | ... = ... | local_dataflow.rb:19:1:21:3 | if ... | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | ... = ... | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | -| local_dataflow.rb:19:1:21:3 | defined? ... | local_dataflow.rb:19:1:21:3 | [false] ! ... | -| local_dataflow.rb:19:1:21:3 | defined? ... | local_dataflow.rb:19:1:21:3 | [true] ! ... | -| local_dataflow.rb:19:1:21:3 | nil | local_dataflow.rb:19:1:21:3 | ... = ... | -| local_dataflow.rb:19:1:21:3 | nil | local_dataflow.rb:19:1:21:3 | x | | local_dataflow.rb:19:1:21:3 | synthetic *args | local_dataflow.rb:19:1:21:3 | __synth__0__1 | -| local_dataflow.rb:19:1:21:3 | x | local_dataflow.rb:19:1:21:3 | defined? ... | -| local_dataflow.rb:19:1:21:3 | x | local_dataflow.rb:19:1:21:3 | phi | +| local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [false] ! ... | +| local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [true] ! ... | +| local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | +| local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | defined? ... | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:20:6:20:6 | x | local_dataflow.rb:20:6:20:10 | ... > ... | | local_dataflow.rb:20:10:20:10 | 1 | local_dataflow.rb:20:6:20:10 | ... > ... | diff --git a/ruby/ql/test/library-tests/variables/ssa.expected b/ruby/ql/test/library-tests/variables/ssa.expected index f06c0032136..f0a3e20ced1 100644 --- a/ruby/ql/test/library-tests/variables/ssa.expected +++ b/ruby/ql/test/library-tests/variables/ssa.expected @@ -127,9 +127,9 @@ definition | ssa.rb:26:3:28:5 | self | ssa.rb:25:1:30:3 | self | | ssa.rb:26:3:28:5 | elem | ssa.rb:26:7:26:10 | elem | | ssa.rb:26:3:28:5 | __synth__0__1 | ssa.rb:26:3:28:5 | __synth__0__1 | -| ssa.rb:26:3:28:5 | elem | ssa.rb:26:7:26:10 | elem | -| ssa.rb:26:3:28:5 | phi | ssa.rb:26:7:26:10 | elem | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | +| ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | +| ssa.rb:26:7:26:10 | phi | ssa.rb:26:7:26:10 | elem | | ssa.rb:32:1:36:3 | self (m3) | ssa.rb:32:1:36:3 | self | | ssa.rb:33:16:35:5 | self | ssa.rb:32:1:36:3 | self | | ssa.rb:33:20:33:20 | x | ssa.rb:33:20:33:20 | x | @@ -318,7 +318,7 @@ read | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:19:9:19:9 | x | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:20:10:20:10 | x | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:21:5:21:5 | x | -| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:3:28:5 | elem | +| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | | ssa.rb:25:1:30:3 | self (m2) | ssa.rb:25:1:30:3 | self | ssa.rb:29:3:29:11 | self | | ssa.rb:25:8:25:15 | elements | ssa.rb:25:8:25:15 | elements | ssa.rb:26:15:26:22 | elements | | ssa.rb:26:3:28:5 | self | ssa.rb:25:1:30:3 | self | ssa.rb:27:5:27:13 | self | @@ -473,7 +473,7 @@ firstRead | ssa.rb:10:5:10:5 | i | ssa.rb:2:3:2:3 | i | ssa.rb:11:10:11:10 | i | | ssa.rb:18:1:23:3 | self (m1) | ssa.rb:18:1:23:3 | self | ssa.rb:20:5:20:10 | self | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:19:9:19:9 | x | -| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:3:28:5 | elem | +| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | | ssa.rb:25:1:30:3 | self (m2) | ssa.rb:25:1:30:3 | self | ssa.rb:29:3:29:11 | self | | ssa.rb:25:8:25:15 | elements | ssa.rb:25:8:25:15 | elements | ssa.rb:26:15:26:22 | elements | | ssa.rb:26:3:28:5 | self | ssa.rb:25:1:30:3 | self | ssa.rb:27:5:27:13 | self | @@ -625,7 +625,7 @@ lastRead | ssa.rb:18:1:23:3 | self (m1) | ssa.rb:18:1:23:3 | self | ssa.rb:20:5:20:10 | self | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:19:9:19:9 | x | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:21:5:21:5 | x | -| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:3:28:5 | elem | +| ssa.rb:25:1:30:3 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | | ssa.rb:25:1:30:3 | self (m2) | ssa.rb:25:1:30:3 | self | ssa.rb:29:3:29:11 | self | | ssa.rb:25:8:25:15 | elements | ssa.rb:25:8:25:15 | elements | ssa.rb:26:15:26:22 | elements | | ssa.rb:26:3:28:5 | self | ssa.rb:25:1:30:3 | self | ssa.rb:27:5:27:13 | self | @@ -741,8 +741,8 @@ phi | ssa.rb:5:3:13:5 | phi | ssa.rb:2:3:2:3 | i | ssa.rb:10:5:10:5 | i | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:18:8:18:8 | x | | ssa.rb:19:9:19:9 | phi | ssa.rb:18:8:18:8 | x | ssa.rb:21:5:21:5 | x | -| ssa.rb:26:3:28:5 | phi | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | | -| ssa.rb:26:3:28:5 | phi | ssa.rb:26:7:26:10 | elem | ssa.rb:26:3:28:5 | elem | +| ssa.rb:26:7:26:10 | phi | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | | +| ssa.rb:26:7:26:10 | phi | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | | ssa.rb:45:3:45:12 | phi | ssa.rb:45:3:45:3 | x | ssa.rb:44:1:47:3 | | | ssa.rb:45:3:45:12 | phi | ssa.rb:45:3:45:3 | x | ssa.rb:45:3:45:3 | x | | ssa.rb:50:3:50:8 | phi | ssa.rb:49:14:49:14 | y | ssa.rb:49:1:51:3 | | diff --git a/ruby/ql/test/library-tests/variables/varaccess.expected b/ruby/ql/test/library-tests/variables/varaccess.expected index 228c7cc049c..0389b0856d3 100644 --- a/ruby/ql/test/library-tests/variables/varaccess.expected +++ b/ruby/ql/test/library-tests/variables/varaccess.expected @@ -225,8 +225,8 @@ variableAccess | ssa.rb:21:5:21:5 | x | ssa.rb:18:8:18:8 | x | ssa.rb:18:1:23:3 | m1 | | ssa.rb:21:5:21:5 | x | ssa.rb:18:8:18:8 | x | ssa.rb:18:1:23:3 | m1 | | ssa.rb:25:8:25:15 | elements | ssa.rb:25:8:25:15 | elements | ssa.rb:25:1:30:3 | m2 | -| ssa.rb:26:3:28:5 | elem | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | m2 | -| ssa.rb:26:3:28:5 | elem | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | m2 | +| ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | m2 | +| ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | m2 | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | elem | ssa.rb:25:1:30:3 | m2 | | ssa.rb:26:15:26:22 | elements | ssa.rb:25:8:25:15 | elements | ssa.rb:25:1:30:3 | m2 | | ssa.rb:27:5:27:13 | self | ssa.rb:25:1:30:3 | self | ssa.rb:25:1:30:3 | m2 | @@ -355,8 +355,8 @@ explicitWrite | ssa.rb:10:5:10:5 | i | ssa.rb:10:5:10:9 | ... = ... | | ssa.rb:21:5:21:5 | x | ssa.rb:21:5:21:10 | ... -= ... | | ssa.rb:21:5:21:5 | x | ssa.rb:21:5:21:10 | ... = ... | -| ssa.rb:26:3:28:5 | elem | ssa.rb:26:3:28:5 | ... = ... | | ssa.rb:26:7:26:10 | elem | ssa.rb:26:3:28:5 | ... = ... | +| ssa.rb:26:7:26:10 | elem | ssa.rb:26:7:26:10 | ... = ... | | ssa.rb:40:3:40:4 | m3 | ssa.rb:40:3:40:9 | ... = ... | | ssa.rb:45:3:45:3 | x | ssa.rb:45:3:45:7 | ... = ... | | ssa.rb:49:14:49:14 | y | ssa.rb:49:14:49:19 | ... = ... | @@ -570,7 +570,7 @@ readAccess | ssa.rb:20:10:20:10 | x | | ssa.rb:21:5:21:5 | x | | ssa.rb:26:3:28:5 | __synth__0__1 | -| ssa.rb:26:3:28:5 | elem | +| ssa.rb:26:7:26:10 | elem | | ssa.rb:26:15:26:22 | elements | | ssa.rb:27:5:27:13 | self | | ssa.rb:27:10:27:13 | elem |