diff --git a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll index 96fa8e8fa442..0153f7a88e00 100644 --- a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll @@ -186,10 +186,14 @@ final class CallExprCfgNode extends CallExprBaseCfgNode, Nodes::CallExprCfgNode final class FormatArgsExprCfgNode extends Nodes::FormatArgsExprCfgNode { private FormatArgsExprChildMapping node; + FormatArgsExprCfgNode() { node = this.getAstNode() } + + /** Gets the `i`th argument of this format arguments expression (0-based). */ ExprCfgNode getArgumentExpr(int i) { any(ChildMapping mapping).hasCfgChild(node, node.getArg(i).getExpr(), this, result) } + /** Gets a format argument of the `i`th format of this format arguments expression (0-based). */ FormatTemplateVariableAccessCfgNode getFormatTemplateVariableAccess(int i) { exists(FormatTemplateVariableAccess v | v.getArgument() = node.getFormat(i).getArgument() and @@ -199,11 +203,18 @@ final class FormatArgsExprCfgNode extends Nodes::FormatArgsExprCfgNode { } } +/** + * A MacroCall. For example: + * ```rust + * todo!() + * ``` + */ final class MacroCallCfgNode extends Nodes::MacroCallCfgNode { private MacroCallChildMapping node; MacroCallCfgNode() { node = this.getAstNode() } + /** Gets the CFG node for the expansion of this macro call, if it exists. */ CfgNode getExpandedNode() { any(ChildMapping mapping).hasCfgChild(node, node.getExpanded(), this, result) } diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected index 312f5a3b0712..499561ff9e6d 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected @@ -1,4 +1,6 @@ | gen_format.rs:5:21:5:22 | {} | getParent: | gen_format.rs:5:14:5:32 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no | +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | getParent: | gen_format.rs:7:14:7:47 | FormatArgsExpr | getIndex: | 1 | hasArgument: | yes | +| gen_format_args_arg.rs:5:26:5:27 | {} | getParent: | gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no | | gen_format_args_expr.rs:6:19:6:20 | {} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no | | gen_format_args_expr.rs:6:26:6:29 | {:?} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 3 | hasArgument: | no | | gen_format_args_expr.rs:7:19:7:21 | {b} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 1 | hasArgument: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected index 8e704471e02c..36fdc5a143de 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected @@ -1,4 +1,5 @@ | gen_format.rs:5:26:5:32 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | hasExpr: | yes | hasName: | no | | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | hasExpr: | yes | hasName: | no | | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | hasExpr: | yes | hasName: | no | | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | hasExpr: | yes | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected index 90cf2cae221f..3e92389a40f2 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected @@ -1,4 +1,5 @@ | gen_format.rs:5:26:5:32 | FormatArgsArg | gen_format.rs:5:26:5:32 | "world" | +| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | gen_format_args_arg.rs:5:32:5:38 | "world" | | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | gen_format_args_expr.rs:6:33:6:33 | 1 | | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | gen_format_args_expr.rs:6:36:6:36 | 2 | | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:37:7:37 | 1 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected index bed19ed26d47..2ea16b3c838f 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected @@ -1,4 +1,6 @@ | gen_format.rs:5:14:5:32 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | | gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 0 | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 | | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected index 89fce13908fd..de3de88e10ae 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected @@ -1,4 +1,5 @@ | gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:26:5:32 | FormatArgsArg | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected index f0061b8dba46..38a50b312249 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected @@ -1,4 +1,6 @@ | gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:21:5:22 | {} | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | 0 | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:26:5:27 | {} | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:19:6:20 | {} | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:26:6:29 | {:?} | | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:19:7:21 | {b} | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected index 1b201bbf36f2..1799fb24878e 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected @@ -1,4 +1,6 @@ | gen_format.rs:5:14:5:32 | FormatArgsExpr | gen_format.rs:5:14:5:23 | "Hello {}\\n" | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | gen_format.rs:7:14:7:47 | "Value {value:#width$.precisio... | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | gen_format_args_arg.rs:5:18:5:29 | "Hello, {}!" | | gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | gen_format_args_expr.rs:5:18:5:26 | "no args" | | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | gen_format_args_expr.rs:6:18:6:30 | "{} foo {:?}" | | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | gen_format_args_expr.rs:7:18:7:32 | "{b} foo {a:?}" | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected index e63b4b6558fc..00f778097482 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected @@ -1,3 +1,6 @@ +| gen_format.rs:7:22:7:26 | value | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format.rs:7:29:7:33 | width | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format.rs:7:36:7:44 | precision | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | | gen_format_args_expr.rs:7:20:7:20 | b | getParent: | gen_format_args_expr.rs:7:19:7:21 | {b} | hasVariable: | no | | gen_format_args_expr.rs:7:28:7:28 | a | getParent: | gen_format_args_expr.rs:7:27:7:31 | {a:?} | hasVariable: | no | | gen_format_args_expr.rs:9:20:9:20 | x | getParent: | gen_format_args_expr.rs:9:19:9:21 | {x} | hasVariable: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected index 11db93ec06dd..1ab1bb5dc612 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected @@ -1,3 +1,6 @@ +| gen_format.rs:7:22:7:26 | value | gen_format.rs:7:22:7:26 | value | +| gen_format.rs:7:29:7:33 | width | gen_format.rs:7:29:7:33 | width | +| gen_format.rs:7:36:7:44 | precision | gen_format.rs:7:36:7:44 | precision | | gen_format_args_expr.rs:9:20:9:20 | x | gen_format_args_expr.rs:9:20:9:20 | x | | gen_format_args_expr.rs:9:25:9:25 | y | gen_format_args_expr.rs:9:25:9:25 | y | | gen_format_argument.rs:5:22:5:26 | value | gen_format_argument.rs:5:22:5:26 | value | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected index df4fdad5c911..9d6d2a496626 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected @@ -1,3 +1,6 @@ +| gen_format.rs:7:22:7:26 | value | +| gen_format.rs:7:29:7:33 | width | +| gen_format.rs:7:36:7:44 | precision | | gen_format_args_expr.rs:9:20:9:20 | x | | gen_format_args_expr.rs:9:25:9:25 | y | | gen_format_argument.rs:5:22:5:26 | value | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected index af9dd77578ce..251598222279 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected @@ -1,3 +1,6 @@ +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:22:7:26 | value | +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:29:7:33 | width | +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:36:7:44 | precision | | gen_format_args_expr.rs:7:19:7:21 | {b} | gen_format_args_expr.rs:7:20:7:20 | b | | gen_format_args_expr.rs:7:27:7:31 | {a:?} | gen_format_args_expr.rs:7:28:7:28 | a | | gen_format_args_expr.rs:9:19:9:21 | {x} | gen_format_args_expr.rs:9:20:9:20 | x | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index a2de927d5f11..84103729147e 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -752,15 +752,18 @@ edges | test.rs:344:23:344:23 | a | test.rs:344:13:344:19 | Some(...) | | | test.rs:344:32:344:54 | ...::panic_fmt | test.rs:344:39:344:53 | "Expected some" | | | test.rs:344:32:344:54 | MacroExpr | test.rs:344:30:344:56 | { ... } | | +| test.rs:344:32:344:54 | panic!... | test.rs:344:32:344:54 | MacroExpr | | | test.rs:344:39:344:53 | "Expected some" | test.rs:344:39:344:53 | FormatArgsExpr | | +| test.rs:344:39:344:53 | ...::const_format_args!... | test.rs:344:39:344:53 | MacroExpr | | +| test.rs:344:39:344:53 | ...::panic_2021!... | test.rs:344:39:344:53 | MacroExpr | | | test.rs:344:39:344:53 | ...::panic_fmt(...) | test.rs:344:39:344:53 | { ... } | | | test.rs:344:39:344:53 | ExprStmt | test.rs:344:32:344:54 | ...::panic_fmt | | -| test.rs:344:39:344:53 | FormatArgsExpr | test.rs:344:39:344:53 | MacroExpr | | -| test.rs:344:39:344:53 | MacroExpr | test.rs:344:32:344:54 | MacroExpr | | +| test.rs:344:39:344:53 | FormatArgsExpr | test.rs:344:39:344:53 | ...::const_format_args!... | | +| test.rs:344:39:344:53 | MacroExpr | test.rs:344:32:344:54 | panic!... | | | test.rs:344:39:344:53 | MacroExpr | test.rs:344:39:344:53 | ...::panic_fmt(...) | | | test.rs:344:39:344:53 | MacroStmts | test.rs:344:39:344:53 | ExprStmt | | | test.rs:344:39:344:53 | MacroStmts | test.rs:344:39:344:53 | MacroStmts | | -| test.rs:344:39:344:53 | { ... } | test.rs:344:39:344:53 | MacroExpr | | +| test.rs:344:39:344:53 | { ... } | test.rs:344:39:344:53 | ...::panic_2021!... | | | test.rs:345:9:345:9 | n | test.rs:343:46:346:5 | { ... } | | | test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:348:29:348:29 | m | | | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | exit fn test_let_with_return | | @@ -835,14 +838,16 @@ edges | test.rs:392:26:394:5 | { ... } | test.rs:392:5:394:5 | exit fn say_hello (normal) | | | test.rs:393:9:393:33 | ...::_print | test.rs:393:18:393:32 | "hello, world!\\n" | | | test.rs:393:9:393:33 | MacroExpr | test.rs:392:26:394:5 | { ... } | | +| test.rs:393:9:393:33 | println!... | test.rs:393:9:393:33 | MacroExpr | | | test.rs:393:9:393:34 | ExprStmt | test.rs:393:18:393:32 | MacroStmts | | | test.rs:393:18:393:32 | "hello, world!\\n" | test.rs:393:18:393:32 | FormatArgsExpr | | | test.rs:393:18:393:32 | ...::_print(...) | test.rs:393:18:393:32 | { ... } | | +| test.rs:393:18:393:32 | ...::format_args_nl!... | test.rs:393:18:393:32 | MacroExpr | | | test.rs:393:18:393:32 | ExprStmt | test.rs:393:9:393:33 | ...::_print | | -| test.rs:393:18:393:32 | FormatArgsExpr | test.rs:393:18:393:32 | MacroExpr | | +| test.rs:393:18:393:32 | FormatArgsExpr | test.rs:393:18:393:32 | ...::format_args_nl!... | | | test.rs:393:18:393:32 | MacroExpr | test.rs:393:18:393:32 | ...::_print(...) | | | test.rs:393:18:393:32 | MacroStmts | test.rs:393:18:393:32 | ExprStmt | | -| test.rs:393:18:393:32 | { ... } | test.rs:393:9:393:33 | MacroExpr | | +| test.rs:393:18:393:32 | { ... } | test.rs:393:9:393:33 | println!... | | | test.rs:396:5:415:5 | enter fn async_block | test.rs:396:26:396:26 | b | | | test.rs:396:5:415:5 | exit fn async_block (normal) | test.rs:396:5:415:5 | exit fn async_block | | | test.rs:396:26:396:26 | b | test.rs:396:26:396:32 | ...: bool | match | @@ -855,14 +860,16 @@ edges | test.rs:397:26:399:9 | { ... } | test.rs:397:13:397:22 | say_godbye | | | test.rs:398:13:398:41 | ...::_print | test.rs:398:22:398:40 | "godbye, everyone!\\n" | | | test.rs:398:13:398:41 | MacroExpr | test.rs:397:26:399:9 | exit { ... } (normal) | | +| test.rs:398:13:398:41 | println!... | test.rs:398:13:398:41 | MacroExpr | | | test.rs:398:13:398:42 | ExprStmt | test.rs:398:22:398:40 | MacroStmts | | | test.rs:398:22:398:40 | "godbye, everyone!\\n" | test.rs:398:22:398:40 | FormatArgsExpr | | | test.rs:398:22:398:40 | ...::_print(...) | test.rs:398:22:398:40 | { ... } | | +| test.rs:398:22:398:40 | ...::format_args_nl!... | test.rs:398:22:398:40 | MacroExpr | | | test.rs:398:22:398:40 | ExprStmt | test.rs:398:13:398:41 | ...::_print | | -| test.rs:398:22:398:40 | FormatArgsExpr | test.rs:398:22:398:40 | MacroExpr | | +| test.rs:398:22:398:40 | FormatArgsExpr | test.rs:398:22:398:40 | ...::format_args_nl!... | | | test.rs:398:22:398:40 | MacroExpr | test.rs:398:22:398:40 | ...::_print(...) | | | test.rs:398:22:398:40 | MacroStmts | test.rs:398:22:398:40 | ExprStmt | | -| test.rs:398:22:398:40 | { ... } | test.rs:398:13:398:41 | MacroExpr | | +| test.rs:398:22:398:40 | { ... } | test.rs:398:13:398:41 | println!... | | | test.rs:400:9:402:10 | let ... = ... | test.rs:400:31:402:9 | { ... } | | | test.rs:400:13:400:27 | say_how_are_you | test.rs:403:9:403:28 | let ... = ... | match | | test.rs:400:31:402:9 | enter { ... } | test.rs:401:13:401:37 | ExprStmt | | @@ -870,14 +877,16 @@ edges | test.rs:400:31:402:9 | { ... } | test.rs:400:13:400:27 | say_how_are_you | | | test.rs:401:13:401:36 | ...::_print | test.rs:401:22:401:35 | "how are you?\\n" | | | test.rs:401:13:401:36 | MacroExpr | test.rs:400:31:402:9 | exit { ... } (normal) | | +| test.rs:401:13:401:36 | println!... | test.rs:401:13:401:36 | MacroExpr | | | test.rs:401:13:401:37 | ExprStmt | test.rs:401:22:401:35 | MacroStmts | | | test.rs:401:22:401:35 | "how are you?\\n" | test.rs:401:22:401:35 | FormatArgsExpr | | | test.rs:401:22:401:35 | ...::_print(...) | test.rs:401:22:401:35 | { ... } | | +| test.rs:401:22:401:35 | ...::format_args_nl!... | test.rs:401:22:401:35 | MacroExpr | | | test.rs:401:22:401:35 | ExprStmt | test.rs:401:13:401:36 | ...::_print | | -| test.rs:401:22:401:35 | FormatArgsExpr | test.rs:401:22:401:35 | MacroExpr | | +| test.rs:401:22:401:35 | FormatArgsExpr | test.rs:401:22:401:35 | ...::format_args_nl!... | | | test.rs:401:22:401:35 | MacroExpr | test.rs:401:22:401:35 | ...::_print(...) | | | test.rs:401:22:401:35 | MacroStmts | test.rs:401:22:401:35 | ExprStmt | | -| test.rs:401:22:401:35 | { ... } | test.rs:401:13:401:36 | MacroExpr | | +| test.rs:401:22:401:35 | { ... } | test.rs:401:13:401:36 | println!... | | | test.rs:403:9:403:28 | let ... = ... | test.rs:403:20:403:27 | { ... } | | | test.rs:403:13:403:16 | noop | test.rs:404:9:404:26 | ExprStmt | match | | test.rs:403:20:403:27 | { ... } | test.rs:403:13:403:16 | noop | | @@ -927,6 +936,7 @@ edges | test.rs:427:41:435:5 | { ... } | test.rs:427:5:435:5 | exit fn const_block_assert (normal) | | | test.rs:430:9:432:9 | ExprStmt | test.rs:431:13:431:50 | ExprStmt | | | test.rs:430:9:432:9 | { ... } | test.rs:434:9:434:10 | 42 | | +| test.rs:431:13:431:49 | ...::panic_2021!... | test.rs:431:13:431:49 | MacroExpr | | | test.rs:431:13:431:49 | ...::panic_explicit | test.rs:431:13:431:49 | ...::panic_explicit(...) | | | test.rs:431:13:431:49 | ...::panic_explicit(...) | test.rs:431:13:431:49 | { ... } | | | test.rs:431:13:431:49 | ExprStmt | test.rs:431:13:431:49 | MacroStmts | | @@ -934,12 +944,13 @@ edges | test.rs:431:13:431:49 | MacroExpr | test.rs:430:9:432:9 | { ... } | | | test.rs:431:13:431:49 | MacroExpr | test.rs:431:13:431:49 | { ... } | | | test.rs:431:13:431:49 | MacroStmts | test.rs:431:13:431:49 | fn panic_cold_explicit | | +| test.rs:431:13:431:49 | assert!... | test.rs:431:13:431:49 | MacroExpr | | | test.rs:431:13:431:49 | enter fn panic_cold_explicit | test.rs:431:13:431:49 | ...::panic_explicit | | | test.rs:431:13:431:49 | exit fn panic_cold_explicit (normal) | test.rs:431:13:431:49 | exit fn panic_cold_explicit | | | test.rs:431:13:431:49 | fn panic_cold_explicit | test.rs:431:13:431:49 | ExprStmt | | | test.rs:431:13:431:49 | panic_cold_explicit | test.rs:431:13:431:49 | panic_cold_explicit(...) | | | test.rs:431:13:431:49 | panic_cold_explicit(...) | test.rs:431:13:431:49 | { ... } | | -| test.rs:431:13:431:49 | { ... } | test.rs:431:13:431:49 | MacroExpr | | +| test.rs:431:13:431:49 | { ... } | test.rs:431:13:431:49 | ...::panic_2021!... | | | test.rs:431:13:431:49 | { ... } | test.rs:431:13:431:49 | exit fn panic_cold_explicit (normal) | | | test.rs:431:13:431:49 | { ... } | test.rs:431:21:431:48 | if ... {...} | | | test.rs:431:13:431:50 | ExprStmt | test.rs:431:21:431:48 | MacroStmts | | @@ -951,7 +962,7 @@ edges | test.rs:431:21:431:48 | [boolean(false)] ! ... | test.rs:431:21:431:48 | if ... {...} | false | | test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:13:431:49 | ExprStmt | true | | test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | { ... } | | -| test.rs:431:21:431:48 | { ... } | test.rs:431:13:431:49 | MacroExpr | | +| test.rs:431:21:431:48 | { ... } | test.rs:431:13:431:49 | assert!... | | | test.rs:431:48:431:48 | 0 | test.rs:431:21:431:48 | ... > ... | | | test.rs:434:9:434:10 | 42 | test.rs:427:41:435:5 | { ... } | | | test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:438:9:438:30 | Const | | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow-partial.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow-partial.expected new file mode 100644 index 000000000000..5c153698e9e8 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow-partial.expected @@ -0,0 +1,2 @@ +edges +#select diff --git a/rust/ql/test/library-tests/dataflow/strings/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/strings/DataFlowStep.expected new file mode 100644 index 000000000000..a7e9c9e70587 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/strings/DataFlowStep.expected @@ -0,0 +1,122 @@ +localStep +| main.rs:5:11:5:11 | [SSA] i | main.rs:6:19:6:19 | i | +| main.rs:5:11:5:11 | i | main.rs:5:11:5:11 | [SSA] i | +| main.rs:5:11:5:16 | ...: i64 | main.rs:5:11:5:11 | i | +| main.rs:6:5:6:20 | MacroExpr | main.rs:5:29:7:1 | { ... } | +| main.rs:6:5:6:20 | res | main.rs:6:13:6:19 | { ... } | +| main.rs:6:13:6:19 | ...::format(...) | main.rs:6:5:6:20 | res | +| main.rs:6:13:6:19 | FormatArgsExpr | main.rs:6:13:6:19 | MacroExpr | +| main.rs:6:13:6:19 | { ... } | main.rs:6:13:6:19 | ...::must_use(...) | +| main.rs:9:17:9:17 | [SSA] i | main.rs:10:5:10:5 | i | +| main.rs:9:17:9:17 | i | main.rs:9:17:9:17 | [SSA] i | +| main.rs:9:17:9:24 | ...: usize | main.rs:9:17:9:17 | i | +| main.rs:10:5:10:5 | i | main.rs:9:36:11:1 | { ... } | +| main.rs:13:17:13:23 | ...: i64 | main.rs:13:17:13:18 | _i | +| main.rs:14:5:14:12 | "source" | main.rs:13:42:15:1 | { ... } | +| main.rs:17:15:17:15 | [SSA] s | main.rs:18:20:18:20 | s | +| main.rs:17:15:17:15 | s | main.rs:17:15:17:15 | [SSA] s | +| main.rs:17:15:17:21 | ...: ... | main.rs:17:15:17:15 | s | +| main.rs:18:14:18:20 | FormatArgsExpr | main.rs:18:14:18:20 | MacroExpr | +| main.rs:21:9:21:9 | [SSA] s | main.rs:22:20:22:20 | s | +| main.rs:21:9:21:9 | s | main.rs:21:9:21:9 | [SSA] s | +| main.rs:21:9:21:17 | ...: String | main.rs:21:9:21:9 | s | +| main.rs:22:14:22:20 | FormatArgsExpr | main.rs:22:14:22:20 | MacroExpr | +| main.rs:26:9:26:9 | [SSA] s | main.rs:27:19:27:19 | s | +| main.rs:26:9:26:9 | s | main.rs:26:9:26:9 | [SSA] s | +| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | +| main.rs:27:9:27:14 | [SSA] sliced | main.rs:28:16:28:21 | sliced | +| main.rs:27:9:27:14 | sliced | main.rs:27:9:27:14 | [SSA] sliced | +| main.rs:27:18:27:25 | &... | main.rs:27:9:27:14 | sliced | +| main.rs:32:9:32:10 | [SSA] s1 | main.rs:35:14:35:15 | s1 | +| main.rs:32:9:32:10 | s1 | main.rs:32:9:32:10 | [SSA] s1 | +| main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 | +| main.rs:33:9:33:10 | [SSA] s2 | main.rs:36:14:36:15 | s2 | +| main.rs:33:9:33:10 | s2 | main.rs:33:9:33:10 | [SSA] s2 | +| main.rs:33:14:33:27 | "2".to_owned(...) | main.rs:33:9:33:10 | s2 | +| main.rs:34:9:34:10 | [SSA] s3 | main.rs:35:19:35:20 | s3 | +| main.rs:34:9:34:10 | s3 | main.rs:34:9:34:10 | [SSA] s3 | +| main.rs:34:14:34:16 | "3" | main.rs:34:9:34:10 | s3 | +| main.rs:35:9:35:10 | [SSA] s4 | main.rs:38:10:38:11 | s4 | +| main.rs:35:9:35:10 | s4 | main.rs:35:9:35:10 | [SSA] s4 | +| main.rs:35:14:35:20 | ... + ... | main.rs:35:9:35:10 | s4 | +| main.rs:35:19:35:20 | s3 | main.rs:36:19:36:20 | s3 | +| main.rs:36:9:36:10 | [SSA] s5 | main.rs:39:10:39:11 | s5 | +| main.rs:36:9:36:10 | s5 | main.rs:36:9:36:10 | [SSA] s5 | +| main.rs:36:14:36:20 | ... + ... | main.rs:36:9:36:10 | s5 | +| main.rs:43:9:43:10 | [SSA] s1 | main.rs:46:34:46:35 | s1 | +| main.rs:43:9:43:10 | s1 | main.rs:43:9:43:10 | [SSA] s1 | +| main.rs:43:14:43:23 | source(...) | main.rs:43:9:43:10 | s1 | +| main.rs:44:9:44:10 | [SSA] s2 | main.rs:47:34:47:35 | s2 | +| main.rs:44:9:44:10 | s2 | main.rs:44:9:44:10 | [SSA] s2 | +| main.rs:44:14:44:28 | "1".to_string(...) | main.rs:44:9:44:10 | s2 | +| main.rs:51:9:51:10 | [SSA] s1 | main.rs:52:27:52:28 | s1 | +| main.rs:51:9:51:10 | s1 | main.rs:51:9:51:10 | [SSA] s1 | +| main.rs:51:14:51:29 | source_slice(...) | main.rs:51:9:51:10 | s1 | +| main.rs:52:9:52:10 | [SSA] s2 | main.rs:53:10:53:11 | s2 | +| main.rs:52:9:52:10 | s2 | main.rs:52:9:52:10 | [SSA] s2 | +| main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 | +| main.rs:57:9:57:10 | [SSA] s1 | main.rs:58:14:58:15 | s1 | +| main.rs:57:9:57:10 | s1 | main.rs:57:9:57:10 | [SSA] s1 | +| main.rs:57:14:57:29 | source_slice(...) | main.rs:57:9:57:10 | s1 | +| main.rs:58:9:58:10 | [SSA] s2 | main.rs:59:10:59:11 | s2 | +| main.rs:58:9:58:10 | s2 | main.rs:58:9:58:10 | [SSA] s2 | +| main.rs:58:14:58:27 | s1.to_string(...) | main.rs:58:9:58:10 | s2 | +| main.rs:63:9:63:9 | [SSA] s | main.rs:64:16:64:16 | s | +| main.rs:63:9:63:9 | s | main.rs:63:9:63:9 | [SSA] s | +| main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | +| main.rs:68:9:68:9 | [SSA] s | main.rs:70:60:70:60 | s | +| main.rs:68:9:68:9 | s | main.rs:68:9:68:9 | [SSA] s | +| main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | +| main.rs:70:9:70:18 | [SSA] formatted1 | main.rs:71:10:71:19 | formatted1 | +| main.rs:70:9:70:18 | formatted1 | main.rs:70:9:70:18 | [SSA] formatted1 | +| main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | +| main.rs:70:46:70:61 | FormatArgsExpr | main.rs:70:34:70:61 | MacroExpr | +| main.rs:70:60:70:60 | s | main.rs:73:55:73:55 | s | +| main.rs:73:9:73:18 | [SSA] formatted2 | main.rs:74:10:74:19 | formatted2 | +| main.rs:73:9:73:18 | formatted2 | main.rs:73:9:73:18 | [SSA] formatted2 | +| main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | +| main.rs:73:46:73:59 | FormatArgsExpr | main.rs:73:34:73:59 | MacroExpr | +| main.rs:76:9:76:13 | [SSA] width | main.rs:77:56:77:60 | width | +| main.rs:76:9:76:13 | width | main.rs:76:9:76:13 | [SSA] width | +| main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | +| main.rs:77:9:77:18 | [SSA] formatted3 | main.rs:78:10:78:19 | formatted3 | +| main.rs:77:9:77:18 | formatted3 | main.rs:77:9:77:18 | [SSA] formatted3 | +| main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | +| main.rs:77:46:77:74 | FormatArgsExpr | main.rs:77:34:77:74 | MacroExpr | +| main.rs:82:9:82:10 | [SSA] s1 | main.rs:86:24:86:25 | s1 | +| main.rs:82:9:82:10 | s1 | main.rs:82:9:82:10 | [SSA] s1 | +| main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | +| main.rs:83:9:83:10 | [SSA] s2 | main.rs:88:20:88:21 | s2 | +| main.rs:83:9:83:10 | s2 | main.rs:83:9:83:10 | [SSA] s2 | +| main.rs:83:14:83:16 | "2" | main.rs:83:9:83:10 | s2 | +| main.rs:84:9:84:10 | [SSA] s3 | main.rs:87:29:87:30 | s3 | +| main.rs:84:9:84:10 | s3 | main.rs:84:9:84:10 | [SSA] s3 | +| main.rs:84:14:84:16 | "3" | main.rs:84:9:84:10 | s3 | +| main.rs:86:10:86:26 | res | main.rs:86:18:86:25 | { ... } | +| main.rs:86:18:86:25 | ...::format(...) | main.rs:86:10:86:26 | res | +| main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | +| main.rs:86:18:86:25 | FormatArgsExpr | main.rs:86:18:86:25 | MacroExpr | +| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | +| main.rs:86:24:86:25 | s1 | main.rs:87:20:87:21 | s1 | +| main.rs:87:10:87:33 | res | main.rs:87:18:87:32 | { ... } | +| main.rs:87:18:87:32 | ...::format(...) | main.rs:87:10:87:33 | res | +| main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | +| main.rs:87:18:87:32 | FormatArgsExpr | main.rs:87:18:87:32 | MacroExpr | +| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | +| main.rs:87:29:87:30 | s3 | main.rs:88:29:88:30 | s3 | +| main.rs:88:10:88:33 | res | main.rs:88:18:88:32 | { ... } | +| main.rs:88:18:88:32 | ...::format(...) | main.rs:88:10:88:33 | res | +| main.rs:88:18:88:32 | ...::must_use(...) | main.rs:88:10:88:33 | MacroExpr | +| main.rs:88:18:88:32 | FormatArgsExpr | main.rs:88:18:88:32 | MacroExpr | +| main.rs:88:18:88:32 | { ... } | main.rs:88:18:88:32 | ...::must_use(...) | +storeStep +| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | +| main.rs:27:19:27:25 | s[...] | &ref | main.rs:27:18:27:25 | &... | +| main.rs:46:34:46:35 | s1 | &ref | main.rs:46:33:46:35 | &s1 | +| main.rs:47:34:47:35 | s2 | &ref | main.rs:47:33:47:35 | &s2 | +readStep +| file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap | +| file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap_or | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap_or | +| file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap | +| file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap_or | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::::unwrap_or | +| main.rs:27:19:27:19 | s | array[] | main.rs:27:19:27:25 | s[...] | diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 016fa4e74cd2..5233ed1d139f 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,13 +1,19 @@ +| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:9 | | file://:0:0:0:0 | [summary param] self in lang:alloc::_::::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::::as_str | MaD:7 | | file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::::text | MaD:0 | | main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | | | main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | | +| main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | | | main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | | | main.rs:13:14:13:14 | 1 | main.rs:13:10:13:14 | ... + ... | | | main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | | | main.rs:23:13:23:13 | a | main.rs:23:13:23:19 | a as u8 | | | main.rs:24:10:24:10 | b | main.rs:24:10:24:17 | b as i64 | | +| main.rs:29:23:29:23 | i | main.rs:29:17:29:23 | FormatArgsExpr | | +| main.rs:33:24:33:24 | s | main.rs:33:18:33:24 | FormatArgsExpr | | | main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] | | +| main.rs:49:24:49:24 | i | main.rs:49:18:49:24 | FormatArgsExpr | | | main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] | | | main.rs:64:24:64:24 | s | main.rs:64:24:64:27 | s[1] | | +| main.rs:64:24:64:27 | s[1] | main.rs:64:18:64:27 | FormatArgsExpr | | | main.rs:69:9:69:12 | arr2 | main.rs:69:9:69:15 | arr2[1] | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index cb8c5b3eb2c2..1a3f186ab7b8 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -6,14 +6,16 @@ edges | variables.rs:3:23:5:1 | { ... } | variables.rs:3:1:5:1 | exit fn print_str (normal) | | | variables.rs:4:5:4:21 | ...::_print | variables.rs:4:14:4:17 | "{}\\n" | | | variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | { ... } | | +| variables.rs:4:5:4:21 | println!... | variables.rs:4:5:4:21 | MacroExpr | | | variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:14:4:20 | MacroStmts | | | variables.rs:4:14:4:17 | "{}\\n" | variables.rs:4:20:4:20 | s | | | variables.rs:4:14:4:20 | ...::_print(...) | variables.rs:4:14:4:20 | { ... } | | +| variables.rs:4:14:4:20 | ...::format_args_nl!... | variables.rs:4:14:4:20 | MacroExpr | | | variables.rs:4:14:4:20 | ExprStmt | variables.rs:4:5:4:21 | ...::_print | | -| variables.rs:4:14:4:20 | FormatArgsExpr | variables.rs:4:14:4:20 | MacroExpr | | +| variables.rs:4:14:4:20 | FormatArgsExpr | variables.rs:4:14:4:20 | ...::format_args_nl!... | | | variables.rs:4:14:4:20 | MacroExpr | variables.rs:4:14:4:20 | ...::_print(...) | | | variables.rs:4:14:4:20 | MacroStmts | variables.rs:4:14:4:20 | ExprStmt | | -| variables.rs:4:14:4:20 | { ... } | variables.rs:4:5:4:21 | MacroExpr | | +| variables.rs:4:14:4:20 | { ... } | variables.rs:4:5:4:21 | println!... | | | variables.rs:4:20:4:20 | s | variables.rs:4:14:4:20 | FormatArgsExpr | | | variables.rs:7:1:9:1 | enter fn print_i64 | variables.rs:7:14:7:14 | i | | | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | variables.rs:7:1:9:1 | exit fn print_i64 | | @@ -22,14 +24,16 @@ edges | variables.rs:7:22:9:1 | { ... } | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | | | variables.rs:8:5:8:21 | ...::_print | variables.rs:8:14:8:17 | "{}\\n" | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | { ... } | | +| variables.rs:8:5:8:21 | println!... | variables.rs:8:5:8:21 | MacroExpr | | | variables.rs:8:5:8:22 | ExprStmt | variables.rs:8:14:8:20 | MacroStmts | | | variables.rs:8:14:8:17 | "{}\\n" | variables.rs:8:20:8:20 | i | | | variables.rs:8:14:8:20 | ...::_print(...) | variables.rs:8:14:8:20 | { ... } | | +| variables.rs:8:14:8:20 | ...::format_args_nl!... | variables.rs:8:14:8:20 | MacroExpr | | | variables.rs:8:14:8:20 | ExprStmt | variables.rs:8:5:8:21 | ...::_print | | -| variables.rs:8:14:8:20 | FormatArgsExpr | variables.rs:8:14:8:20 | MacroExpr | | +| variables.rs:8:14:8:20 | FormatArgsExpr | variables.rs:8:14:8:20 | ...::format_args_nl!... | | | variables.rs:8:14:8:20 | MacroExpr | variables.rs:8:14:8:20 | ...::_print(...) | | | variables.rs:8:14:8:20 | MacroStmts | variables.rs:8:14:8:20 | ExprStmt | | -| variables.rs:8:14:8:20 | { ... } | variables.rs:8:5:8:21 | MacroExpr | | +| variables.rs:8:14:8:20 | { ... } | variables.rs:8:5:8:21 | println!... | | | variables.rs:8:20:8:20 | i | variables.rs:8:14:8:20 | FormatArgsExpr | | | variables.rs:11:1:13:1 | enter fn print_i64_ref | variables.rs:11:18:11:18 | i | | | variables.rs:11:1:13:1 | exit fn print_i64_ref (normal) | variables.rs:11:1:13:1 | exit fn print_i64_ref | | @@ -218,9 +222,10 @@ edges | variables.rs:94:39:94:42 | "x5" | variables.rs:94:34:94:43 | Some(...) | | | variables.rs:96:13:96:19 | "not yet implemented" | variables.rs:96:13:96:19 | ...::panic(...) | | | variables.rs:96:13:96:19 | ...::panic | variables.rs:96:13:96:19 | "not yet implemented" | | -| variables.rs:96:13:96:19 | ...::panic(...) | variables.rs:96:13:96:19 | MacroExpr | | +| variables.rs:96:13:96:19 | ...::panic(...) | variables.rs:96:13:96:19 | todo!... | | | variables.rs:96:13:96:19 | MacroExpr | variables.rs:95:14:97:9 | { ... } | | | variables.rs:96:13:96:19 | MacroStmts | variables.rs:96:13:96:19 | ...::panic | | +| variables.rs:96:13:96:19 | todo!... | variables.rs:96:13:96:19 | MacroExpr | | | variables.rs:98:5:98:13 | print_str | variables.rs:98:15:98:16 | x5 | | | variables.rs:98:5:98:17 | print_str(...) | variables.rs:93:19:99:1 | { ... } | | | variables.rs:98:5:98:18 | ExprStmt | variables.rs:98:5:98:13 | print_str | | @@ -383,13 +388,15 @@ edges | variables.rs:175:43:177:9 | { ... } | variables.rs:171:5:180:5 | match msg { ... } | | | variables.rs:176:13:176:52 | ...::_print | variables.rs:176:22:176:51 | "Found an id in another range\\... | | | variables.rs:176:13:176:52 | MacroExpr | variables.rs:175:43:177:9 | { ... } | | +| variables.rs:176:13:176:52 | println!... | variables.rs:176:13:176:52 | MacroExpr | | | variables.rs:176:22:176:51 | "Found an id in another range\\... | variables.rs:176:22:176:51 | FormatArgsExpr | | | variables.rs:176:22:176:51 | ...::_print(...) | variables.rs:176:22:176:51 | { ... } | | +| variables.rs:176:22:176:51 | ...::format_args_nl!... | variables.rs:176:22:176:51 | MacroExpr | | | variables.rs:176:22:176:51 | ExprStmt | variables.rs:176:13:176:52 | ...::_print | | -| variables.rs:176:22:176:51 | FormatArgsExpr | variables.rs:176:22:176:51 | MacroExpr | | +| variables.rs:176:22:176:51 | FormatArgsExpr | variables.rs:176:22:176:51 | ...::format_args_nl!... | | | variables.rs:176:22:176:51 | MacroExpr | variables.rs:176:22:176:51 | ...::_print(...) | | | variables.rs:176:22:176:51 | MacroStmts | variables.rs:176:22:176:51 | ExprStmt | | -| variables.rs:176:22:176:51 | { ... } | variables.rs:176:13:176:52 | MacroExpr | | +| variables.rs:176:22:176:51 | { ... } | variables.rs:176:13:176:52 | println!... | | | variables.rs:178:9:178:29 | ...::Hello {...} | variables.rs:178:26:178:27 | id | match | | variables.rs:178:26:178:27 | id | variables.rs:179:13:179:21 | print_i64 | match | | variables.rs:179:13:179:21 | print_i64 | variables.rs:179:23:179:24 | id | | @@ -1237,11 +1244,12 @@ edges | variables.rs:554:5:555:26 | let ... = ... | variables.rs:555:23:555:24 | let ... = 37 | | | variables.rs:554:9:554:22 | var_from_macro | variables.rs:556:5:556:30 | ExprStmt | match | | variables.rs:555:9:555:25 | MacroExpr | variables.rs:554:9:554:22 | var_from_macro | | +| variables.rs:555:9:555:25 | let_in_macro!... | variables.rs:555:9:555:25 | MacroExpr | | | variables.rs:555:9:555:25 | var_in_macro | variables.rs:555:9:555:25 | var_in_macro | match | | variables.rs:555:9:555:25 | var_in_macro | variables.rs:555:23:555:24 | { ... } | | | variables.rs:555:23:555:24 | 37 | variables.rs:555:9:555:25 | var_in_macro | | | variables.rs:555:23:555:24 | let ... = 37 | variables.rs:555:23:555:24 | 37 | | -| variables.rs:555:23:555:24 | { ... } | variables.rs:555:9:555:25 | MacroExpr | | +| variables.rs:555:23:555:24 | { ... } | variables.rs:555:9:555:25 | let_in_macro!... | | | variables.rs:556:5:556:13 | print_i64 | variables.rs:556:15:556:28 | var_from_macro | | | variables.rs:556:5:556:29 | print_i64(...) | variables.rs:553:23:557:1 | { ... } | | | variables.rs:556:5:556:30 | ExprStmt | variables.rs:556:5:556:13 | print_i64 | |