Skip to content

Commit a63d8eb

Browse files
buildbreaker2021copybara-github
authored andcommitted
Fix a bug where frozen targets list was mutated while expanding env attribute
for cc_test. Add a test covering the behavior. PiperOrigin-RevId: 504294442 Change-Id: If9f96b631ca958e746613563c56103044c973277
1 parent bb0b886 commit a63d8eb

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -762,9 +762,10 @@ def _expand_nested_variable(ctx, additional_vars, exp, execpath = True, targets
762762
if not execpath:
763763
if exp.startswith("location"):
764764
exp = exp.replace("location", "rootpath", 1)
765+
data_targets = []
765766
if ctx.attr.data != None:
766-
targets.extend(ctx.attr.data)
767-
return ctx.expand_location("$({})".format(exp), targets = targets)
767+
data_targets = ctx.attr.data
768+
return ctx.expand_location("$({})".format(exp), targets = targets + data_targets)
768769

769770
# Recursively expand nested make variables, but since there is no recursion
770771
# in Starlark we will do it via for loop.

src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ java_test(
147147
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
148148
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
149149
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
150+
"//src/main/java/com/google/devtools/build/lib/analysis:run_environment_info",
150151
"//src/main/java/com/google/devtools/build/lib/cmdline",
151152
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
152153
"//src/main/java/com/google/devtools/build/lib/rules/cpp",

src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.google.devtools.build.lib.analysis.AnalysisUtils;
2828
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
2929
import com.google.devtools.build.lib.analysis.OutputGroupInfo;
30+
import com.google.devtools.build.lib.analysis.RunEnvironmentInfo;
3031
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
3132
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
3233
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
@@ -809,6 +810,21 @@ public void testExpandedLinkopts() throws Exception {
809810
.getPathString()));
810811
}
811812

813+
@Test
814+
public void testExpandedEnv() throws Exception {
815+
scratch.file(
816+
"a/BUILD",
817+
"genrule(name = 'linker', cmd='generate', outs=['a.lds'])",
818+
"cc_test(",
819+
" name='bin_test',",
820+
" srcs=['b.cc'],",
821+
" env={'SOME_KEY': '-Wl,@$(location a.lds)'},",
822+
" deps=['a.lds'])");
823+
ConfiguredTarget starlarkTarget = getConfiguredTarget("//a:bin_test");
824+
RunEnvironmentInfo provider = starlarkTarget.get(RunEnvironmentInfo.PROVIDER);
825+
assertThat(provider.getEnvironment()).containsEntry("SOME_KEY", "-Wl,@a/a.lds");
826+
}
827+
812828
@Test
813829
public void testProvidesLinkerScriptToLinkAction() throws Exception {
814830
scratch.file(

0 commit comments

Comments
 (0)