Author: adrian Date: Tue Jan 19 12:02:47 2016 New Revision: 258152 URL: http://llvm.org/viewvc/llvm-project?rev=258152&view=rev Log: Module Debugging: Defer the emission of anonymous tag decls until we are visiting their declcontext.
This fixes a regression introduced in r256962: When building debug info for a typdef'd anonymous tag type, we would be visiting the inner anonymous type first thus creating a "typedef changes linkage of anonymous type, but linkage was already computed" error. rdar://problem/24199640 Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp cfe/trunk/test/Modules/ExtDebugInfo.cpp cfe/trunk/test/Modules/Inputs/DebugCXX.h cfe/trunk/test/Modules/ModuleDebugInfo.cpp Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=258152&r1=258151&r2=258152&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original) +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Tue Jan 19 12:02:47 2016 @@ -190,6 +190,10 @@ public: if (D->isFromASTFile()) return; + // Anonymous tag decls are deferred until we are building their declcontext. + if (D->getName().empty()) + return; + DebugTypeVisitor DTV(*Builder->getModuleDebugInfo(), *Ctx, false); DTV.TraverseDecl(D); Builder->UpdateCompletedType(D); Modified: cfe/trunk/test/Modules/ExtDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ExtDebugInfo.cpp?rev=258152&r1=258151&r2=258152&view=diff ============================================================================== --- cfe/trunk/test/Modules/ExtDebugInfo.cpp (original) +++ cfe/trunk/test/Modules/ExtDebugInfo.cpp Tue Jan 19 12:02:47 2016 @@ -35,6 +35,10 @@ enum { auto anon_enum = DebugCXX::e2; char _anchor = anon_enum + conflicting_uid; +TypedefUnion tdu; +TypedefEnum tde; +TypedefStruct tds; + // CHECK: ![[NS:.*]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]], // CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX @@ -62,6 +66,13 @@ char _anchor = anon_enum + conflicting_u // CHECK-SAME: flags: DIFlagFwdDecl, // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIfNS_6traitsIfEEEE") +// CHECK: !DICompositeType(tag: DW_TAG_union_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS12TypedefUnion") +// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS11TypedefEnum") +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, +// CHECK-SAME: flags: DIFlagFwdDecl, identifier: "_ZTS13TypedefStruct") + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_member", // CHECK-SAME: scope: !"_ZTSN8DebugCXX6StructE" Modified: cfe/trunk/test/Modules/Inputs/DebugCXX.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/DebugCXX.h?rev=258152&r1=258151&r2=258152&view=diff ============================================================================== --- cfe/trunk/test/Modules/Inputs/DebugCXX.h (original) +++ cfe/trunk/test/Modules/Inputs/DebugCXX.h Tue Jan 19 12:02:47 2016 @@ -58,3 +58,7 @@ class FwdVirtual { }; struct PureForwardDecl; + +typedef union { int i; } TypedefUnion; +typedef enum { e0 = 0 } TypedefEnum; +typedef struct { int i; } TypedefStruct; Modified: cfe/trunk/test/Modules/ModuleDebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=258152&r1=258151&r2=258152&view=diff ============================================================================== --- cfe/trunk/test/Modules/ModuleDebugInfo.cpp (original) +++ cfe/trunk/test/Modules/ModuleDebugInfo.cpp Tue Jan 19 12:02:47 2016 @@ -28,6 +28,10 @@ // CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE") // CHECK: !DINamespace(name: "DebugCXX" +// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS11TypedefEnum") + // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "Struct" // CHECK-SAME: identifier: "_ZTSN8DebugCXX6StructE") @@ -47,6 +51,14 @@ // CHECK-SAME: identifier: "_ZTS10FwdVirtual") // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$FwdVirtual" +// CHECK: !DICompositeType(tag: DW_TAG_union_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS12TypedefUnion") + +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, +// CHECK-SAME-NOT: name: +// CHECK-SAME: identifier: "_ZTS13TypedefStruct") + // CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "FloatInstatiation" // no mangled name here yet. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits