diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 3 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/cxx-decls-imported.h | 3 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/cxx-decls-merged.h | 3 | ||||
-rw-r--r-- | clang/test/Modules/cxx-decls.cpp | 2 |
4 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index a10ae1edf94..97e43b700b9 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -1611,7 +1611,8 @@ void ASTDeclReader::VisitCXXConstructorDecl(CXXConstructorDecl *D) { VisitCXXMethodDecl(D); if (auto *CD = ReadDeclAs<CXXConstructorDecl>(Record, Idx)) - D->setInheritedConstructor(CD); + if (D->isCanonicalDecl()) + D->setInheritedConstructor(CD); D->IsExplicitSpecified = Record[Idx++]; // FIXME: We should defer loading this until we need the constructor's body. std::tie(D->CtorInitializers, D->NumCtorInitializers) = diff --git a/clang/test/Modules/Inputs/cxx-decls-imported.h b/clang/test/Modules/Inputs/cxx-decls-imported.h index 8c1e74f17c3..a4910fee753 100644 --- a/clang/test/Modules/Inputs/cxx-decls-imported.h +++ b/clang/test/Modules/Inputs/cxx-decls-imported.h @@ -47,3 +47,6 @@ typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner; namespace Aliased { extern int a; } namespace Alias = Aliased; + +struct InhCtorA { InhCtorA(int); }; +struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; }; diff --git a/clang/test/Modules/Inputs/cxx-decls-merged.h b/clang/test/Modules/Inputs/cxx-decls-merged.h index 86e81a9bb68..5eefb44992f 100644 --- a/clang/test/Modules/Inputs/cxx-decls-merged.h +++ b/clang/test/Modules/Inputs/cxx-decls-merged.h @@ -25,3 +25,6 @@ typedef decltype(name_for_linkage2_inner_b) NameForLinkage2Inner; namespace Aliased { extern int b; } namespace Alias = Aliased; + +struct InhCtorA { InhCtorA(int); }; +struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; }; diff --git a/clang/test/Modules/cxx-decls.cpp b/clang/test/Modules/cxx-decls.cpp index 109306ed79d..4064040c125 100644 --- a/clang/test/Modules/cxx-decls.cpp +++ b/clang/test/Modules/cxx-decls.cpp @@ -52,5 +52,7 @@ int use_namespace_alias() { return Alias::a + Alias::b; } void use_extern_c_function_2() { ExternCFunction(); } +InhCtorB inhctorb(2); + // CHECK: VarDecl [[mergeUsedFlag:0x[0-9a-f]*]] {{.*}} in cxx_decls.imported used mergeUsedFlag // CHECK: VarDecl {{0x[0-9a-f]*}} prev [[mergeUsedFlag]] {{.*}} in cxx_decls_merged used mergeUsedFlag |