Skip to content

Arguments to macro calls to format and print are not registered as data-flow nodes #22244

Description

@jeongsoolee09

Description

The arguments passed to calls to Rust macros format and print are not recognized as a DataFlow::Node.

Reproduction steps

CodeQL CLI version

It is set locally via gh codeql set-local-version 2.25.6.

$ gh codeql set-local-version 2.25.6
CodeQL command-line toolchain release 2.25.6.
Copyright (C) 2019-2026 GitHub, Inc.
Unpacked in: /Users/{username}/.local/share/gh/extensions/gh-codeql/dist/release/v2.25.6
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve packs' and 'codeql resolve languages'.
$ codeql --version
CodeQL command-line toolchain release 2.25.6.
Copyright (C) 2019-2026 GitHub, Inc.
Unpacked in: /Users/{username}/.local/share/gh/extensions/gh-codeql/dist/release/v2.25.6
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve packs' and 'codeql resolve languages'.

Target code

This is in a file named /path/to/project/src/main.rs.

fn main() {
    let x = 1;
    let string = format!("{}", &x);
    let string2 = &string;
    println!("{}", &string2);
}

Test code

This is in a file named /path/to/project/ql/identify-dataflow-nodes.ql.

import rust
import codeql.rust.dataflow.DataFlow

from DataFlow::Node node
select node, node.asExpr().getAPrimaryQlClass(), node.getLocation()

Database creation log

Make a database named rust-format-data-flow-db at /path/to/project.

$ codeql database create --language=rust rust-format-data-flow-db --overwrite
Initializing database at /path/to/project/rust-format-data-flow-db.
Running build command: []
Running command in /path/to/project: [/Users/{username}/.local/share/gh/extensions/gh-codeql/dist/release/v2.25.6/rust/tools/autobuild.sh]
[2026-07-28 11:41:36] [build-stderr] Scanning for files in /path/to/project...
[2026-07-28 11:41:36] [build-stderr] /path/to/project/rust-format-data-flow-db: Indexing files in in /path/to/project...
[2026-07-28 11:41:36] [build-stderr] Running command in /path/to/project: [/Users/{username}/.local/share/gh/extensions/gh-codeql/dist/release/v2.25.6/rust/tools/index-files.sh, /path/to/project/rust-format-data-flow-db/working/files-to-index12188386520088816605.list]
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]  INFO configuration: {
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     scratch_dir: "/path/to/project/rust-format-data-flow-db/working",
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     trap_dir: "/path/to/project/rust-format-data-flow-db/trap/rust",
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     source_archive_dir: "/path/to/project/rust-format-data-flow-db/src",
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     diagnostic_dir: "/path/to/project/rust-format-data-flow-db/diagnostic/extractors/rust",
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_target_dir: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_target: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_features: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_cfg_overrides: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_extra_env: {},
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_extra_args: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     cargo_all_targets: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     logging_flamegraph: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     logging_verbosity: Some(
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]         "progress",
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     ),
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     trap_compression: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     number of inputs: 1,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     qltest: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     qltest_cargo_check: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     qltest_dependencies: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     qltest_use_nightly: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     sysroot: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     sysroot_src: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     rustc_src: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     build_script_command: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     extra_includes: [],
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     proc_macro_server: None,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     extract_dependencies_as_source: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]     force_library_mode: false,
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout] }
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]  INFO found manifests:
[2026-07-28 11:41:36] [build-stdout] [2026-07-28 11:41:36] [build-stdout]   /path/to/project/Cargo.toml
[2026-07-28 11:41:47] [build-stdout] [2026-07-28 11:41:47] [build-stdout]  WARN /path/to/project/src/main.rs:3:18: macro expansion failed for 'format'
[2026-07-28 11:41:47] [build-stdout] [2026-07-28 11:41:47] [build-stdout]  WARN /path/to/project/src/main.rs:5:14: macro expansion failed for '$crate::format_args_nl'
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (LoadManifest): 10.223s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (CrateGraph): 0.011s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (Extract): 0.018s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (LoadSource): 0.227s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (Parse): 0.000s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (FindManifests): 0.008s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (ParseLibrary): 1.757s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration (ExtractLibrary): 4.825s
[2026-07-28 11:41:57] [build-stdout] [2026-07-28 11:41:57] [build-stdout]  INFO total duration: 21.190s
Finalizing database at /path/to/project/rust-format-data-flow-db.
Running TRAP import for CodeQL database at /path/to/project/rust-format-data-flow-db...
Importing TRAP files
Merging relations
Finished writing database (relations: 24.73 MiB; string pool: 11.03 MiB).
TRAP import complete (8.7s).
Finished zipping source archive (5.77 MiB).
Successfully created database at /path/to/project/rust-format-data-flow-db.

Query run log

$ codeql query run ql/identify-dataflow-nodes.ql --database=rust-format-data-flow-db
Resolving data extensions.
Finished resolving data extensions.
Error retrieving qlpack commit hash from Git repository
Loading data extensions.
Finished loading data extensions.
Compiling query plan for /path/to/project/ql/identify-dataflow-nodes.ql.
[1/1 comp 11s] Compiled /path/to/project/ql/identify-dataflow-nodes.ql.
identify-dataflow-nodes.ql: Evaluation completed (1.1s).
|       node       |        col1        |                                 col2                                 |
+------------------+--------------------+----------------------------------------------------------------------+
| string           | VariableAccess     | /path/to/project/src/main.rs@4:20:4:25 |
| ...::_print      | PathExpr           | /path/to/project/src/main.rs@5:5:5:12  |
| 1                | IntegerLiteralExpr | /path/to/project/src/main.rs@2:13:2:13 |
| MacroExpr        | MacroExpr          | /path/to/project/src/main.rs@3:18:3:34 |
| MacroExpr        | MacroExpr          | /path/to/project/src/main.rs@5:14:5:27 |
| MacroExpr        | MacroExpr          | /path/to/project/src/main.rs@5:5:5:28  |
| ...::_print(...) | CallExpr           | /path/to/project/src/main.rs@5:14:5:27 |
| &string          | RefExpr            | /path/to/project/src/main.rs@4:19:4:25 |
| { ... }          | BlockExpr          | /path/to/project/src/main.rs@5:14:5:27 |
| { ... }          | BlockExpr          | /path/to/project/src/main.rs@5:14:5:27 |
| { ... }          | BlockExpr          | /path/to/project/src/main.rs@1:11:6:1  |
Shutting down query evaluator.

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions