Is this bug only reachable with modules debug info? Could you describe the nature of the fix (not quite clear to me just by looking at it)
On Mon, Mar 7, 2016 at 12:58 PM, Adrian Prantl via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: adrian > Date: Mon Mar 7 14:58:52 2016 > New Revision: 262851 > > URL: http://llvm.org/viewvc/llvm-project?rev=262851&view=rev > Log: > Module Debugging: Fix a crash when emitting debug info for nested tag types > whose DeclContext is not yet complete by deferring their emission. > > rdar://problem/24918680 > > Modified: > cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.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=262851&r1=262850&r2=262851&view=diff > > ============================================================================== > --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original) > +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Mon Mar 7 > 14:58:52 2016 > @@ -201,6 +201,15 @@ public: > if (D->getName().empty()) > return; > > + // Defer tag decls until their declcontext is complete. > + auto *DeclCtx = D->getDeclContext(); > + while (DeclCtx) { > + if (auto *D = dyn_cast<TagDecl>(DeclCtx)) > + if (!D->isCompleteDefinition()) > + return; > + DeclCtx = DeclCtx->getParent(); > + } > + > DebugTypeVisitor DTV(*Builder->getModuleDebugInfo(), *Ctx); > DTV.TraverseDecl(D); > Builder->UpdateCompletedType(D); > > Modified: cfe/trunk/test/Modules/Inputs/DebugCXX.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/DebugCXX.h?rev=262851&r1=262850&r2=262851&view=diff > > ============================================================================== > --- cfe/trunk/test/Modules/Inputs/DebugCXX.h (original) > +++ cfe/trunk/test/Modules/Inputs/DebugCXX.h Mon Mar 7 14:58:52 2016 > @@ -72,3 +72,14 @@ namespace { > struct InAnonymousNamespace { int i; }; > } > } > + > +class Base; > +class A { > + virtual Base *getParent() const; > +}; > +class Base {}; > +class Derived : Base { > + class B : A { > + Derived *getParent() const override; > + }; > +}; > > Modified: cfe/trunk/test/Modules/ModuleDebugInfo.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=262851&r1=262850&r2=262851&view=diff > > ============================================================================== > --- cfe/trunk/test/Modules/ModuleDebugInfo.cpp (original) > +++ cfe/trunk/test/Modules/ModuleDebugInfo.cpp Mon Mar 7 14:58:52 2016 > @@ -71,6 +71,13 @@ > // CHECK-NOT: name: > // CHECK-SAME: identifier: "_ZTS13TypedefStruct") > > +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "Derived", > +// CHECK-SAME: identifier: "_ZTS7Derived") > +// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B", scope: > !"_ZTS7Derived", > +// CHECK-SAME: elements: ![[B_MBRS:.*]], vtableHolder: > !"_ZTS1A" > +// CHECK: ![[B_MBRS]] = !{{{.*}}, ![[GET_PARENT:.*]]} > +// CHECK: ![[GET_PARENT]] = !DISubprogram(name: "getParent" > + > // 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 >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits