On Tue, Jul 12, 2016 at 2:55 PM, Robinson, Paul <paul.robin...@sony.com> wrote:
> A declaration that gets used within the CU generally does get a debug-info > description. > It does except if it is a static data member: $ cat t.cpp struct S { static int i; }; int &gv = &S::i; $ ~/llvm/Debug+Asserts/bin/clang t.cpp -target x86_64-gnu-linux -g -S -emit-llvm -o - ; ModuleID = 't.cpp' source_filename = "t.cpp" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64--linux-gnu" @_ZN1S1iE = external global i32, align 4 @gv = global i32* @_ZN1S1iE, align 8 !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!7, !8} !llvm.ident = !{!9} !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 (trunk 275169) (llvm/trunk 275188)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !3) !1 = !DIFile(filename: "t.cpp", directory: "/usr/local/google/home/majnemer") !2 = !{} !3 = !{!4} !4 = distinct !DIGlobalVariable(name: "gv", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true, variable: i32** @gv) !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64) !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !7 = !{i32 2, !"Dwarf Version", i32 4} !8 = !{i32 2, !"Debug Info Version", i32 3} !9 = !{!"clang version 3.9.0 (trunk 275169) (llvm/trunk 275188)"} Note that there is no DIGlobalVariable for S::i. I agree that this is not great behavior. I merely changed a dllimport'd template instantiation of a static data member to behave the same way, poor, way a declaration is treated. > I think no DWARF-using target has dllimport (yet) so you are actually > handling a new situation here. Being unable to find the entity in the > dllimport-using CU is not a friendly debugging experience. > > --paulr > > > > *From:* David Majnemer [mailto:david.majne...@gmail.com] > *Sent:* Tuesday, July 12, 2016 2:07 PM > > *To:* Robinson, Paul > *Cc:* cfe-commits (cfe-commits@lists.llvm.org) > *Subject:* Re: r275040 - [CodeGen] Treat imported static local variables > as declarations > > > > > > > > On Tue, Jul 12, 2016 at 2:02 PM, Robinson, Paul <paul.robin...@sony.com> > wrote: > > I was asking for the debug info to describe the entity as a declaration, > rather than a definition. > > Instead you eliminated the debug-info description entirely. These are > pretty different things. > > > > I treated the dllimported entity the same way we currently treat > declarations: ignore them. > > I don't have the bandwidth to generically improve debug info beyond what > we can do for DWARF/GDB targets. > > > > --paulr > > > > *From:* David Majnemer [mailto:david.majne...@gmail.com] > *Sent:* Monday, July 11, 2016 12:27 PM > > > *To:* Robinson, Paul > *Cc:* cfe-commits (cfe-commits@lists.llvm.org) > *Subject:* Re: r275040 - [CodeGen] Treat imported static local variables > as declarations > > > > > > > > On Mon, Jul 11, 2016 at 11:45 AM, Robinson, Paul <paul.robin...@sony.com> > wrote: > > It was not particularly obvious that by "static local variables" you > actually meant "template static data members." > > Now I can tell that this is not addressing what I was asking about in the > comment on r274986. > > > > I'm not sure I understand. How is this not addressing what you are asking > for? We will no longer emit a DIGlobalVariable for the imported static > data member. > > > > --paulr > > > > *From:* David Majnemer [mailto:david.majne...@gmail.com] > *Sent:* Monday, July 11, 2016 9:53 AM > *To:* Robinson, Paul > *Cc:* cfe-commits (cfe-commits@lists.llvm.org) > *Subject:* Re: r275040 - [CodeGen] Treat imported static local variables > as declarations > > > > > > > > On Mon, Jul 11, 2016 at 9:48 AM, Robinson, Paul <paul.robin...@sony.com> > wrote: > > This changes the IR but not the debug-info metadata? > --paulr > > > > The net effect is that the debug-info metadata is not generated for such > static members. > > > > > > -----Original Message----- > > From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On Behalf > Of > > David Majnemer via cfe-commits > > Sent: Sunday, July 10, 2016 9:28 PM > > To: cfe-commits@lists.llvm.org > > Subject: r275040 - [CodeGen] Treat imported static local variables as > > declarations > > > > Author: majnemer > > Date: Sun Jul 10 23:28:21 2016 > > New Revision: 275040 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=275040&view=rev > > Log: > > [CodeGen] Treat imported static local variables as declarations > > > > Imported variables cannot really be definitions for the purposes of > > IR generation. > > > > Modified: > > cfe/trunk/lib/CodeGen/CGDeclCXX.cpp > > cfe/trunk/lib/CodeGen/CodeGenModule.cpp > > cfe/trunk/test/CodeGenCXX/dllimport.cpp > > > > Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp > > URL: http://llvm.org/viewvc/llvm- > > > project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=275040&r1=275039&r2=275040 > > &view=diff > > > ========================================================================== > > ==== > > --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Sun Jul 10 23:28:21 2016 > > @@ -323,10 +323,6 @@ CodeGenModule::EmitCXXGlobalVarDeclInitF > > D->hasAttr<CUDASharedAttr>())) > > return; > > > > - // DLL imported variables will be initialized by the export side. > > - if (D->hasAttr<DLLImportAttr>()) > > - return; > > - > > // Check if we've already initialized this decl. > > auto I = DelayedCXXInitPosition.find(D); > > if (I != DelayedCXXInitPosition.end() && I->second == ~0U) > > > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp > > URL: http://llvm.org/viewvc/llvm- > > > project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=275040&r1=275039&r2=27 > > 5040&view=diff > > > ========================================================================== > > ==== > > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sun Jul 10 23:28:21 2016 > > @@ -2851,6 +2851,10 @@ static void ReplaceUsesOfNonProtoTypeWit > > } > > > > void CodeGenModule::HandleCXXStaticMemberVarInstantiation(VarDecl *VD) { > > + auto DK = VD->isThisDeclarationADefinition(); > > + if (DK == VarDecl::Definition && VD->hasAttr<DLLImportAttr>()) > > + return; > > + > > TemplateSpecializationKind TSK = VD->getTemplateSpecializationKind(); > > // If we have a definition, this might be a deferred decl. If the > > // instantiation is explicit, make sure we emit it at the end. > > > > Modified: cfe/trunk/test/CodeGenCXX/dllimport.cpp > > URL: http://llvm.org/viewvc/llvm- > > > project/cfe/trunk/test/CodeGenCXX/dllimport.cpp?rev=275040&r1=275039&r2=27 > > 5040&view=diff > > > ========================================================================== > > ==== > > --- cfe/trunk/test/CodeGenCXX/dllimport.cpp (original) > > +++ cfe/trunk/test/CodeGenCXX/dllimport.cpp Sun Jul 10 23:28:21 2016 > > @@ -676,7 +676,7 @@ namespace ClassTemplateStaticDef { > > static int x; > > }; > > template <typename T> int S<T>::x; > > - // MSC-DAG: @"\01?x@?$S@H@ClassTemplateStaticDef@@2HA" = > > available_externally dllimport global i32 0 > > + // MSC-DAG: @"\01?x@?$S@H@ClassTemplateStaticDef@@2HA" = external > > dllimport global i32 > > int f() { return S<int>::x; } > > > > // Partial class template specialization static field: > > @@ -685,7 +685,7 @@ namespace ClassTemplateStaticDef { > > static int x; > > }; > > template <typename A> int T<A*>::x; > > - // GNU-DAG: @_ZN22ClassTemplateStaticDef1TIPvE1xE = > > available_externally dllimport global i32 0 > > + // GNU-DAG: @_ZN22ClassTemplateStaticDef1TIPvE1xE = external dllimport > > global i32 > > int g() { return T<void*>::x; } > > } > > > > > > > > _______________________________________________ > > 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