]> granicus.if.org Git - clang/commitdiff
[Modules] Fix tiny bug where we failed to get the canonical decl when
authorChandler Carruth <chandlerc@gmail.com>
Thu, 26 Mar 2015 22:22:22 +0000 (22:22 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 26 Mar 2015 22:22:22 +0000 (22:22 +0000)
deserializing an inherited constructor.

This is the exact same logic we use when deserializing method overrides
for the same reason: the canonical decl may end up pinned to a different
decl when we are improting modules, we need to re-pin to the canonical
one during reading.

My test case for this will come in a subsequent commit. I was trying to
test a more tricky bug fix and the test case happened to tickle this bug
as well.

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

lib/Serialization/ASTReaderDecl.cpp

index 184e6d7772a3211b3d1c9e3a5557290ad5eb62b7..3499c8ea488d0c2b5006ecb019eb052f218d3261 100644 (file)
@@ -1628,7 +1628,7 @@ void ASTDeclReader::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
 
   if (auto *CD = ReadDeclAs<CXXConstructorDecl>(Record, Idx))
     if (D->isCanonicalDecl())
-      D->setInheritedConstructor(CD);
+      D->setInheritedConstructor(CD->getCanonicalDecl());
   D->IsExplicitSpecified = Record[Idx++];
 }