> On Jan 19, 2016, at 4:23 PM, David Blaikie <dblai...@gmail.com> wrote: > > > > On Tue, Jan 19, 2016 at 4:04 PM, Adrian Prantl <apra...@apple.com> wrote: > >> On Jan 19, 2016, at 3:52 PM, David Blaikie <dblai...@gmail.com> wrote: >> >> >> >> On Tue, Jan 19, 2016 at 3:42 PM, Adrian Prantl via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> Author: adrian >> Date: Tue Jan 19 17:42:53 2016 >> New Revision: 258251 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=258251&view=rev >> Log: >> Module Debugging: Don't emit external type references to anonymous types. >> Even if they exist in the module, they can't be matched with the forward >> declaration in the object file. >> >> They can't be matched because they're matched by (non-mangled) name? > > Yes, dsymutil and lldb use the (non-mangled) name + DeclContext (which > includes the qualified module name). > >> I thought at least they'd be matched by mangled name (& perhaps we need to >> emit DW_AT_linkage_name on them to make that possible)? > > Emitting the DW_AT_linkage_name and matching/indexing types based on it is > definitely interesting for the future (bag of dwarf ...), but currently LLVM > doesn’t do that. > > Even before bag-of-dwarf, it seems using mangled names might be helpful, but > I don't think I have enough context/brain-swap-space to think about it too > hard right now. > > >> >> <rdar://problem/24199640> >> >> Modified: >> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> cfe/trunk/test/Modules/ExtDebugInfo.cpp >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=258251&r1=258250&r2=258251&view=diff >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Jan 19 17:42:53 2016 >> @@ -1536,8 +1536,9 @@ static bool shouldOmitDefinition(CodeGen >> const RecordDecl *RD, >> const LangOptions &LangOpts) { >> // Does the type exist in an imported clang module? >> - if (DebugTypeExtRefs && RD->isFromASTFile() && RD->getDefinition()) >> - return true; >> + if (DebugTypeExtRefs && RD->isFromASTFile() && RD->getDefinition() && >> + RD->isExternallyVisible()) >> >> Not sure if this is the right check. There might be named things that are >> static (so not externally visible) in headers? > > I used isExternallyVisible() because it implies that the type won’t have a > mangled name, (mostly thinking about the future where this would become more > relevant), but at the moment we can relax this to RD->getName().isEmpty() and > worry about nonexisting mangled names later. > > Might be more accurate. > > Probably good to have a test case with a static named type in a module too, > then? >
See r258272. It is even more complicated :-) There are externally visible anonymous types that still can be found: typedef struct { } s; // I can be found via the typedef. There are named internal types that can be found: namespace { struct s {}; } // I can be found by name. I changed the condition to: - RD->isExternallyVisible()) + (RD->isExternallyVisible() || !RD->getName().empty())) -- adrian > > -- adrian > >> >> + return true; >> >> if (DebugKind > CodeGenOptions::LimitedDebugInfo) >> return false; >> >> Modified: cfe/trunk/test/Modules/ExtDebugInfo.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ExtDebugInfo.cpp?rev=258251&r1=258250&r2=258251&view=diff >> ============================================================================== >> --- cfe/trunk/test/Modules/ExtDebugInfo.cpp (original) >> +++ cfe/trunk/test/Modules/ExtDebugInfo.cpp Tue Jan 19 17:42:53 2016 >> @@ -84,4 +84,13 @@ void foo() { >> // CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, scope: ![[NS]], >> // CHECK-SAME: line: 16 >> >> +// CHECK: !DIGlobalVariable(name: "GlobalUnion", >> +// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]] >> +// CHECK: ![[GLOBAL_UNION]] = !DICompositeType(tag: DW_TAG_union_type, >> +// CHECK-SAME: elements: !{{[0-9]+}}) >> +// CHECK: !DIGlobalVariable(name: "GlobalStruct", >> +// CHECK-SAME: type: ![[GLOBAL_STRUCT:[0-9]+]] >> +// CHECK: ![[GLOBAL_STRUCT]] = !DICompositeType(tag: DW_TAG_structure_type, >> +// CHECK-SAME: elements: !{{[0-9]+}}) >> + >> // CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, >> entity: !"_ZTSN8DebugCXX6StructE", line: 24) >> >> >> _______________________________________________ >> 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