[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)