Author: rnk Date: Tue Aug 18 18:18:57 2015 New Revision: 245388 URL: http://llvm.org/viewvc/llvm-project?rev=245388&view=rev Log: Merge r244488 to the 3.7 release branch
It avoids doing key function optimizations when the key function is dllimported. Fixed PR24409. Modified: cfe/branches/release_37/ (props changed) cfe/branches/release_37/lib/AST/RecordLayoutBuilder.cpp cfe/branches/release_37/test/CodeGenCXX/dllimport-rtti.cpp Propchange: cfe/branches/release_37/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Aug 18 18:18:57 2015 @@ -1,4 +1,4 @@ /cfe/branches/type-system-rewrite:134693-134817 -/cfe/trunk:242244,242285,242293,242297,242313,242382,242422,242499,242574,242600,242660,242662,242667,242678,242766,242854,242905,242973,243018,243048,243085,243098,243101,243105,243133,243144,243153,243196,243206,243277,243280,243285,243289,243343,243417,243463,243538,243594,243642-243644,243851,243945-243950,243964,244000,244193,244266,244468,244502,244719,244794,245041,245259 +/cfe/trunk:242244,242285,242293,242297,242313,242382,242422,242499,242574,242600,242660,242662,242667,242678,242766,242854,242905,242973,243018,243048,243085,243098,243101,243105,243133,243144,243153,243196,243206,243277,243280,243285,243289,243343,243417,243463,243538,243594,243642-243644,243851,243945-243950,243964,244000,244193,244266,244468,244488,244502,244719,244794,245041,245259 /cfe/trunk/test:170344 /cfe/trunk/test/SemaTemplate:126920 Modified: cfe/branches/release_37/lib/AST/RecordLayoutBuilder.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/lib/AST/RecordLayoutBuilder.cpp?rev=245388&r1=245387&r2=245388&view=diff ============================================================================== --- cfe/branches/release_37/lib/AST/RecordLayoutBuilder.cpp (original) +++ cfe/branches/release_37/lib/AST/RecordLayoutBuilder.cpp Tue Aug 18 18:18:57 2015 @@ -2014,6 +2014,12 @@ static const CXXMethodDecl *computeKeyFu continue; } + // If the key function is dllimport but the class isn't, then the class has + // no key function. The DLL that exports the key function won't export the + // vtable in this case. + if (MD->hasAttr<DLLImportAttr>() && !RD->hasAttr<DLLImportAttr>()) + return nullptr; + // We found it. return MD; } Modified: cfe/branches/release_37/test/CodeGenCXX/dllimport-rtti.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/test/CodeGenCXX/dllimport-rtti.cpp?rev=245388&r1=245387&r2=245388&view=diff ============================================================================== --- cfe/branches/release_37/test/CodeGenCXX/dllimport-rtti.cpp (original) +++ cfe/branches/release_37/test/CodeGenCXX/dllimport-rtti.cpp Tue Aug 18 18:18:57 2015 @@ -20,3 +20,11 @@ struct __declspec(dllimport) V { virtual void f(); } v; // GNU-DAG: @_ZTV1V = external dllimport + +struct W { + __declspec(dllimport) virtual void f(); + virtual void g(); +} w; +// GNU-DAG: @_ZTV1W = linkonce_odr +// GNU-DAG: @_ZTS1W = linkonce_odr +// GNU-DAG: @_ZTI1W = linkonce_odr _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits