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. --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<mailto: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<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<mailto: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<mailto: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