From ed40ca962b47921bb15d75bba40a73c65e5c8d18 Mon Sep 17 00:00:00 2001 From: Corentin Kerisit Date: Tue, 2 Jun 2026 15:05:55 +0200 Subject: [PATCH] fix: allow env requires_not_none on void variables --- cc/toolchains/impl/args_utils.bzl | 4 +-- tests/rule_based_toolchain/args/BUILD | 8 ++++++ tests/rule_based_toolchain/args/args_test.bzl | 26 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/cc/toolchains/impl/args_utils.bzl b/cc/toolchains/impl/args_utils.bzl index 5d0d18e24..a1dcdc36e 100644 --- a/cc/toolchains/impl/args_utils.bzl +++ b/cc/toolchains/impl/args_utils.bzl @@ -141,9 +141,9 @@ def validate_env_variables(*, env, variables, actions, used_format_vars, fail = env_requires_types = {} if env.requires_not_none: env_requires_types[env.requires_not_none] = struct( - msg = "requires_not_none for env variables only works on optional string, file, or directory types", + msg = "requires_not_none for env variables only works on optional void, string, file, or directory types", valid_types = ["option"], - valid_elements = ["string", "file", "directory"], + valid_elements = ["void", "string", "file", "directory"], ) for var_name in used_format_vars: diff --git a/tests/rule_based_toolchain/args/BUILD b/tests/rule_based_toolchain/args/BUILD index 4370b4d6f..5cdc3eed9 100644 --- a/tests/rule_based_toolchain/args/BUILD +++ b/tests/rule_based_toolchain/args/BUILD @@ -52,6 +52,14 @@ util.helper_target( requires_not_none = "//cc/toolchains/variables:dependency_file", ) +util.helper_target( + cc_args, + name = "env_only_requires_void", + actions = ["//cc/toolchains/actions:cpp_link_executable"], + env = {"STRIP_DEBUG_SYMBOLS": "1"}, + requires_not_none = "//cc/toolchains/variables:strip_debug_symbols", +) + util.helper_target( cc_args, name = "iterate_over_optional", diff --git a/tests/rule_based_toolchain/args/args_test.bzl b/tests/rule_based_toolchain/args/args_test.bzl index bcb485bd3..c0fcbc160 100644 --- a/tests/rule_based_toolchain/args/args_test.bzl +++ b/tests/rule_based_toolchain/args/args_test.bzl @@ -152,6 +152,31 @@ def _env_only_requires_test(env, targets): converted.flag_sets().contains_exactly([]) + void_env_only = env.expect.that_target(targets.env_only_requires_void).provider(ArgsInfo) + void_env_only.actions().contains_exactly([ + Label("//cc/toolchains/actions:cpp_link_executable"), + ]) + void_env_only.env().entries().contains_exactly( + {"STRIP_DEBUG_SYMBOLS": "1"}, + ) + void_env_only.env().requires_not_none().some().equals("strip_debug_symbols") + + converted_void = env.expect.that_value( + convert_args(targets.env_only_requires_void[ArgsInfo]), + factory = _CONVERTED_ARGS, + ) + + converted_void.env_sets().contains_exactly([env_set( + actions = ["c++-link-executable"], + env_entries = [env_entry( + key = "STRIP_DEBUG_SYMBOLS", + value = "1", + expand_if_available = "strip_debug_symbols", + )], + )]) + + converted_void.flag_sets().contains_exactly([]) + def _with_dir_test(env, targets): with_dir = env.expect.that_target(targets.with_dir).provider(ArgsInfo) with_dir.allowlist_include_directories().contains_exactly([_TOOL_DIRECTORY]) @@ -235,6 +260,7 @@ TARGETS = [ ":some_variable", ":env_only", ":env_only_requires", + ":env_only_requires_void", ":build_setting_format", ":with_dir", ":with_dir_and_data",