Index: tools/gn/scope.cc |
diff --git a/tools/gn/scope.cc b/tools/gn/scope.cc |
index 4e049ebbc545ad997de936ffd37ffdaca7197967..63b45bc6f01b9c2662ded7504ea768baeca6f7dd 100644 |
--- a/tools/gn/scope.cc |
+++ b/tools/gn/scope.cc |
@@ -307,8 +307,11 @@ bool Scope::NonRecursiveMergeTo(Scope* dest, |
if (!options.clobber_existing) { |
const Template* existing_template = dest->GetTemplate(i->first); |
- if (existing_template) { |
- // Rule present in both the source and the dest. |
+ // Since templates are refcounted, we can check if it's the same one by |
+ // comparing pointers. |
+ if (existing_template && i->second != existing_template) { |
+ // Rule present in both the source and the dest, and they're not the |
+ // same one. |
std::string desc_string(desc_for_err); |
*err = Err(node_for_err, "Template collision.", |
"This " + desc_string + " contains a template \"" + |