This patch was reverted because it breaks a test on the buildbots (that I've been unable to reproduce locally), so that's why you didn't seen anything. I'll try again to land the patch once I can fix and verify that test.
This patch is one part of the change. The other part is http://reviews.llvm.org/D21939, which ensures this extra info is carried through for CodeView debug info. I'm not familiar with DWARF type units (but am currently reading about them). I don't immediately see how this change would affect the calculation of the type signature. The intent is to ensure that there is a type record for Bar in code like this: struct Foo { struct Bar {}; }; Without this change, Bar is omitted from the debug info metadata. On Thu, Jul 7, 2016 at 4:03 PM, David Blaikie <dblai...@gmail.com> wrote: > This may cause problems for DWARF type unit consistency... > > Under what conditions do nested types appear in the member list? (my > simple test case on a fresh clang didn't seem to produce anything about the > nested type: struct outer { struct inner { int i; }; int j; }; outer o; ) > > On Wed, Jul 6, 2016 at 7:46 AM, Adrian McCarthy via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: amccarth >> Date: Wed Jul 6 09:46:42 2016 >> New Revision: 274628 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=274628&view=rev >> Log: >> Include debug info for nested structs and classes >> >> This includes nested types in the member list, even if there are no >> members of that type. Note that structs and classes have themselves as an >> "implicit struct" as the first member, so we skip implicit ones. >> >> Differential Revision: http://reviews.llvm.org/D21705 >> >> Modified: >> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> cfe/trunk/lib/CodeGen/CGDebugInfo.h >> cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp >> cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp >> cfe/trunk/test/CodeGenCXX/debug-info-ms-abi.cpp >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=274628&r1=274627&r2=274628&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Wed Jul 6 09:46:42 2016 >> @@ -1095,6 +1095,13 @@ void CGDebugInfo::CollectRecordNormalFie >> elements.push_back(FieldType); >> } >> >> +void CGDebugInfo::CollectRecordNestedRecord( >> + const RecordDecl *RD, SmallVectorImpl<llvm::Metadata *> &elements) { >> + QualType Ty = CGM.getContext().getTypeDeclType(RD); >> + llvm::DIType *nestedType = getOrCreateType(Ty, getOrCreateMainFile()); >> + elements.push_back(nestedType); >> +} >> + >> void CGDebugInfo::CollectRecordFields( >> const RecordDecl *record, llvm::DIFile *tunit, >> SmallVectorImpl<llvm::Metadata *> &elements, >> @@ -1131,6 +1138,9 @@ void CGDebugInfo::CollectRecordFields( >> >> // Bump field number for next field. >> ++fieldNo; >> + } else if (const auto *nestedRec = dyn_cast<CXXRecordDecl>(I)) { >> + if (!nestedRec->isImplicit() && nestedRec->getDeclContext() == >> record) >> + CollectRecordNestedRecord(nestedRec, elements); >> } >> } >> } >> @@ -3633,8 +3643,8 @@ void CGDebugInfo::EmitUsingDirective(con >> if (CGM.getCodeGenOpts().getDebugInfo() < >> codegenoptions::LimitedDebugInfo) >> return; >> const NamespaceDecl *NSDecl = UD.getNominatedNamespace(); >> - if (!NSDecl->isAnonymousNamespace() || >> - CGM.getCodeGenOpts().DebugExplicitImport) { >> + if (!NSDecl->isAnonymousNamespace() || >> + CGM.getCodeGenOpts().DebugExplicitImport) { >> DBuilder.createImportedModule( >> getCurrentContextDescriptor(cast<Decl>(UD.getDeclContext())), >> getOrCreateNameSpace(NSDecl), >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=274628&r1=274627&r2=274628&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Wed Jul 6 09:46:42 2016 >> @@ -254,6 +254,8 @@ class CGDebugInfo { >> llvm::DIFile *F, >> SmallVectorImpl<llvm::Metadata *> &E, >> llvm::DIType *RecordTy, const RecordDecl >> *RD); >> + void CollectRecordNestedRecord(const RecordDecl *RD, >> + SmallVectorImpl<llvm::Metadata *> &E); >> void CollectRecordFields(const RecordDecl *Decl, llvm::DIFile *F, >> SmallVectorImpl<llvm::Metadata *> &E, >> llvm::DICompositeType *RecordTy); >> >> Modified: cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp?rev=274628&r1=274627&r2=274628&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp (original) >> +++ cfe/trunk/test/CodeGenCXX/debug-info-dup-fwd-decl.cpp Wed Jul 6 >> 09:46:42 2016 >> @@ -19,6 +19,6 @@ protected: >> >> Test t; >> >> -// CHECK: !DIDerivedType(tag: DW_TAG_pointer_type >> // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "data" >> +// CHECK: !DIDerivedType(tag: DW_TAG_pointer_type >> // CHECK-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "data" >> >> Modified: cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp?rev=274628&r1=274627&r2=274628&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp >> (original) >> +++ cfe/trunk/test/CodeGenCXX/debug-info-indirect-field-decl.cpp Wed Jul >> 6 09:46:42 2016 >> @@ -8,18 +8,18 @@ template <class T, int T::*ptr> class Fo >> struct Bar { >> int i1; >> // CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" >> - // CHECK: !DIDerivedType(tag: DW_TAG_member, scope: >> - // CHECK-SAME: line: [[@LINE+4]] >> - // CHECK-SAME: baseType: ![[UNION:[0-9]+]] >> - // CHECK-SAME: size: 32, align: 32, offset: 32 >> - // CHECK: ![[UNION]] = distinct !DICompositeType(tag: >> DW_TAG_union_type,{{.*}} identifier: "_ZTSN3BarUt_E") >> + // CHECK: ![[UNION:[0-9]+]] = distinct !DICompositeType(tag: >> DW_TAG_union_type,{{.*}} identifier: "_ZTSN3BarUt_E") >> union { >> // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i2", >> - // CHECK-SAME: line: [[@LINE+5]] >> + // CHECK-SAME: line: [[@LINE+9]] >> // CHECK-SAME: baseType: ![[INT]] >> // CHECK-SAME: size: 32, align: 32 >> // CHECK-NOT: offset: >> // CHECK-SAME: ){{$}} >> + // CHECK: !DIDerivedType(tag: DW_TAG_member, scope: >> + // CHECK-SAME: line: [[@LINE-8]] >> + // CHECK-SAME: baseType: ![[UNION]] >> + // CHECK-SAME: size: 32, align: 32, offset: 32 >> int i2; >> }; >> }; >> >> Modified: cfe/trunk/test/CodeGenCXX/debug-info-ms-abi.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-ms-abi.cpp?rev=274628&r1=274627&r2=274628&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/debug-info-ms-abi.cpp (original) >> +++ cfe/trunk/test/CodeGenCXX/debug-info-ms-abi.cpp Wed Jul 6 09:46:42 >> 2016 >> @@ -14,6 +14,9 @@ Foo::Nested n; >> // CHECK: ![[Foo:[^ ]*]] = distinct !DICompositeType(tag: >> DW_TAG_structure_type, name: "Foo", >> // CHECK-SAME: identifier: ".?AUFoo@@" >> >> +// CHECK: distinct !DICompositeType(tag: DW_TAG_structure_type, name: >> "Nested", >> +// CHECK-SAME: identifier: ".?AUNested@Foo@@" >> + >> // CHECK: !DISubprogram(name: "f", >> // CHECK-SAME: containingType: ![[Foo]], virtuality: >> DW_VIRTUALITY_virtual, virtualIndex: 0, >> // CHECK-SAME: flags: DIFlagPrototyped | DIFlagIntroducedVirtual, >> @@ -25,6 +28,3 @@ Foo::Nested n; >> // CHECK: !DISubprogram(name: "h", >> // CHECK-SAME: containingType: ![[Foo]], virtuality: >> DW_VIRTUALITY_virtual, virtualIndex: 2, >> // CHECK-SAME: flags: DIFlagPrototyped | DIFlagIntroducedVirtual, >> - >> -// CHECK: distinct !DICompositeType(tag: DW_TAG_structure_type, name: >> "Nested", >> -// CHECK-SAME: identifier: ".?AUNested@Foo@@" >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits