diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java | 16 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java | 4 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index ec52681412..66360f4828 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -616,11 +616,23 @@ public abstract class DependencyResolver { return; // Skip this round: this is either a loading error or unevaluated Skyframe dep. } BuildConfiguration.TransitionApplier transitionApplier = config.getTransitionApplier(); + boolean applyNullTransition = false; if (BuildConfiguration.usesNullConfiguration(toTarget)) { transitionApplier.applyTransition(Attribute.ConfigurationTransition.NULL); + applyNullTransition = true; } - Dependency dep = Iterables.getOnlyElement(transitionApplier.getDependencies(depLabel, - requiredAspects(aspect, attribute, toTarget, rule))); + + ImmutableSet<AspectDescriptor> aspects = requiredAspects(aspect, attribute, toTarget, rule); + Dependency dep; + if (config.useDynamicConfigurations() && !applyNullTransition) { + // Since we feed a pre-prepared configuration directly to the dep, it won't get trimmed to + // the dep's fragments. + // TODO(gregce): properly trim this configuration, too. + dep = Dependency.withConfigurationAndAspects(depLabel, config, aspects); + } else { + dep = Iterables.getOnlyElement(transitionApplier.getDependencies(depLabel, aspects)); + } + outgoingEdges.put(attribute, dep); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index 22955612a1..b9f839c977 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -453,8 +453,8 @@ final class ConfiguredTargetFunction implements SkyFunction { new AttributeAndLabel(depsEntry.getKey(), dep.getLabel()); if (dep.hasStaticConfiguration()) { - // Certain targets (like output files) trivially pass their configurations to their deps. - // So no need to transform them in any way. + // Certain targets (like output files and late-bound splits) trivially pass their + // configurations to their deps. So no need to transform them in any way. putOnlyEntry(trimmedDeps, attributeAndLabel, dep); continue; } else if (dep.getTransition() == Attribute.ConfigurationTransition.NULL) { |