Rust: turn off the test cfg by default

This commit is contained in:
Paolo Tranquilli
2024-11-08 17:07:03 +01:00
parent a13c70bd11
commit f77f2b7ff0
4 changed files with 20 additions and 5 deletions

View File

@@ -137,13 +137,20 @@ fn to_cfg_override(spec: &str) -> CfgAtom {
fn to_cfg_overrides(specs: &Vec<String>) -> CfgOverrides {
let mut enabled_cfgs = Vec::new();
let mut disabled_cfgs = Vec::new();
let mut has_test_explicitly_enabled = false;
for spec in specs {
if spec.starts_with("-") {
disabled_cfgs.push(to_cfg_override(&spec[1..]));
} else {
enabled_cfgs.push(to_cfg_override(spec));
if spec == "test" {
has_test_explicitly_enabled = true;
}
}
}
if !has_test_explicitly_enabled {
disabled_cfgs.push(to_cfg_override("test"));
}
if let Some(global) = CfgDiff::new(enabled_cfgs, disabled_cfgs) {
CfgOverrides {
global,
@@ -151,6 +158,10 @@ fn to_cfg_overrides(specs: &Vec<String>) -> CfgOverrides {
}
} else {
warn!("non-disjoint cfg overrides, ignoring: {}", specs.join(", "));
CfgOverrides::default()
CfgOverrides {
global: CfgDiff::new(Vec::new(), vec![to_cfg_override("test")])
.expect("disabling one cfg should always succeed"),
..Default::default()
}
}
}

View File

@@ -1,3 +1,4 @@
| src/cfg.rs:1:1:2:16 | cfg_flag |
| src/cfg.rs:4:1:5:15 | cfg_key |
| src/cfg.rs:13:1:14:15 | no_test |
| src/cfg.rs:13:1:14:12 | test |
| src/cfg.rs:16:1:17:24 | pointer_width_32 |

View File

@@ -10,5 +10,8 @@ fn cfg_no_flag() {}
#[cfg(not(cfg_key = "value"))]
fn cfg_no_key() {}
#[cfg(not(test))]
fn no_test() {}
#[cfg(test)]
fn test() {}
#[cfg(target_pointer_width = "32")]
fn pointer_width_32() {}

View File

@@ -23,7 +23,7 @@ def test_target_linux(codeql, rust):
@pytest.mark.ql_test("arch_functions.ql", expected=f".{platform.system()}.expected")
def test_cfg_override(codeql, rust):
# currently codeql CLI has a limitation not allow to pass `=` in values via `--extractor-option`
os.environ["CODEQL_EXTRACTOR_RUST_OPTION_CARGO_CFG_OVERRIDES"] = "cfg_flag,cfg_key=value,-test"
os.environ["CODEQL_EXTRACTOR_RUST_OPTION_CARGO_CFG_OVERRIDES"] = "cfg_flag,cfg_key=value,-target_pointer_width=64,target_pointer_width=32,test"
codeql.database.create()
@pytest.mark.ql_test("arch_functions.ql", expected=f".{platform.system()}.expected")