diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 93cd932a6187..51d930073dc8 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -535,7 +535,7 @@ ASTDeclReader::RedeclarableResult ASTDeclReader::VisitTagDecl(TagDecl *TD) { TypedefNameForLinkage = Reader.GetIdentifierInfo(F, Record, Idx); break; case 3: // DeclaratorForAnonDecl - TD->NamedDeclOrQualifier = ReadDeclAs(Record, Idx); + NamedDeclForTagDecl = ReadDeclID(Record, Idx); break; default: llvm_unreachable("unexpected tag info kind"); diff --git a/clang/test/Modules/Inputs/cxx-templates-a.h b/clang/test/Modules/Inputs/cxx-templates-a.h index c2ce74d195b6..92333b377a19 100644 --- a/clang/test/Modules/Inputs/cxx-templates-a.h +++ b/clang/test/Modules/Inputs/cxx-templates-a.h @@ -89,3 +89,11 @@ typedef PartiallyInstantiatePartialSpec PartiallyInstantiatePartialSpecHel void InstantiateWithAliasTemplate(WithAliasTemplate::X); inline int InstantiateWithAnonymousDeclsA(WithAnonymousDecls x) { return (x.k ? x.a : x.b) + (x.k ? x.s.c : x.s.d) + x.e; } inline int InstantiateWithAnonymousDeclsB2(WithAnonymousDecls x); + + +template +struct MergeAnonUnionMember { + MergeAnonUnionMember() { (void)values.t1; } + union { int t1; } values; +}; +inline MergeAnonUnionMember<> maum_a() { return {}; } diff --git a/clang/test/Modules/Inputs/cxx-templates-c.h b/clang/test/Modules/Inputs/cxx-templates-c.h index 6daffadc6ced..6b4c50667065 100644 --- a/clang/test/Modules/Inputs/cxx-templates-c.h +++ b/clang/test/Modules/Inputs/cxx-templates-c.h @@ -11,3 +11,10 @@ template struct MergeTemplateDefinitions { static constexpr int g(); }; template constexpr int MergeTemplateDefinitions::g() { return 2; } + +template +struct MergeAnonUnionMember { + MergeAnonUnionMember() { (void)values.t1; } + union { int t1; } values; +}; +inline MergeAnonUnionMember<> maum_c() { return {}; } diff --git a/clang/test/Modules/cxx-templates.cpp b/clang/test/Modules/cxx-templates.cpp index 3833e995c52e..b29923366513 100644 --- a/clang/test/Modules/cxx-templates.cpp +++ b/clang/test/Modules/cxx-templates.cpp @@ -144,6 +144,8 @@ MergeSpecializations::explicitly_specialized_in_b spec_in_b_2; MergeSpecializations::explicitly_specialized_in_c spec_in_c_2; #endif +MergeAnonUnionMember<> maum_main; + using AliasTemplateMergingTest = WithAliasTemplate::X; int AnonymousDeclsMergingTest(WithAnonymousDecls WAD, WithAnonymousDecls WADC) {