]> granicus.if.org Git - clang/commitdiff
[modules] Don't bother looking up a declaration to merge into if we're not
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 10 Mar 2015 02:57:50 +0000 (02:57 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 10 Mar 2015 02:57:50 +0000 (02:57 +0000)
actually loading a formerly-canonical declaration.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@231742 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Serialization/ASTReaderDecl.cpp

index 9a382c1659d998c6cc8ffd089f57564f500a597d..0789ba5e3e7e5aa7ff6369b073b1171fe24dd850 100644 (file)
@@ -2114,6 +2114,10 @@ void ASTDeclReader::mergeRedeclarable(Redeclarable<T> *DBase,
   if (!Reader.getContext().getLangOpts().Modules)
     return;
 
+  // If we're not the canonical declaration, we don't need to merge.
+  if (!DBase->isFirstDecl())
+    return;
+
   if (auto *Existing = Redecl.getKnownMergeTarget())
     // We already know of an existing declaration we should merge with.
     mergeRedeclarable(D, cast<T>(Existing), Redecl, TemplatePatternID);
@@ -2182,7 +2186,8 @@ void ASTDeclReader::mergeRedeclarable(Redeclarable<T> *DBase, T *Existing,
   T *ExistingCanon = Existing->getCanonicalDecl();
   T *DCanon = D->getCanonicalDecl();
   if (ExistingCanon != DCanon) {
-    assert(DCanon->getGlobalID() == Redecl.getFirstID());
+    assert(DCanon->getGlobalID() == Redecl.getFirstID() &&
+           "already merged this declaration");
 
     // Have our redeclaration link point back at the canonical declaration
     // of the existing declaration, so that this declaration has the