[C++] Fix target specific variables in implicit rules
diff --git a/dep.cc b/dep.cc
index 94f501a..219593d 100644
--- a/dep.cc
+++ b/dep.cc
@@ -442,11 +442,9 @@
*out_rule = r;
return true;
}
- if (vars) {
- CHECK(irule->output_patterns.size() == 1);
- vars = MergeImplicitRuleVars(irule->output_patterns[0], vars);
- *out_var = vars;
- }
+ CHECK(irule->output_patterns.size() == 1);
+ vars = MergeImplicitRuleVars(irule->output_patterns[0], vars);
+ *out_var = vars;
*out_rule = irule;
return true;
}
diff --git a/testcase/target_specific_var_with_pattern.mk b/testcase/target_specific_var_with_pattern.mk
index fe275be..c425caa 100644
--- a/testcase/target_specific_var_with_pattern.mk
+++ b/testcase/target_specific_var_with_pattern.mk
@@ -1,9 +1,18 @@
-test: foo.x
+# TODO(go): Fix
+test: foo.x bar.z
+
+Z:=FAIL
foo.x: X:=PASS
%.x: X+=FAIL
%.x: Y:=PASS
+%.x: Z:=PASS
%.x:
- echo X=$(X) Y=$(Y)
+ echo X=$(X) Y=$(Y) Z=$(Z)
+
+X:=FAIL
+%.z: X:=PASS
+%.z:
+ echo $(X)