From 321931b7527cf4e719e32fc8bbb833a480f8218f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 3 Jan 2025 14:41:03 +0100 Subject: [PATCH] Rust: Accept expected changes and fix other CI complaints --- .../lib/codeql/rust/controlflow/CfgNodes.qll | 11 ++ .../generated/FormatArgsExpr/Format.expected | 2 + .../FormatArgsExpr/FormatArgsArg.expected | 1 + .../FormatArgsArg_getExpr.expected | 1 + .../FormatArgsExpr/FormatArgsExpr.expected | 2 + .../FormatArgsExpr_getArg.expected | 1 + .../FormatArgsExpr_getFormat.expected | 2 + .../FormatArgsExpr_getTemplate.expected | 2 + .../FormatArgsExpr/FormatArgument.expected | 3 + .../FormatArgument_getVariable.expected | 3 + .../FormatTemplateVariableAccess.expected | 3 + .../Format_getArgument.expected | 3 + .../global/inline-flow-partial.expected | 2 + .../dataflow/strings/DataFlowStep.expected | 122 ++++++++++++++++++ 14 files changed, 158 insertions(+) create mode 100644 rust/ql/test/library-tests/dataflow/global/inline-flow-partial.expected create mode 100644 rust/ql/test/library-tests/dataflow/strings/DataFlowStep.expected 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/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[...] |