Author: majnemer Date: Mon Jun 20 22:40:16 2016 New Revision: 273237 URL: http://llvm.org/viewvc/llvm-project?rev=273237&view=rev Log: [CodeGen] Do not run initializers for imported variables
The export side is responsible for running any initializers, they are run when the module is first loaded. Attempting to run an initializer for the import side is not possible. This fixes PR28216. Added: cfe/trunk/test/CodeGenCXX/PR28216.cpp Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=273237&r1=273236&r2=273237&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Mon Jun 20 22:40:16 2016 @@ -323,6 +323,10 @@ 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) Added: cfe/trunk/test/CodeGenCXX/PR28216.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/PR28216.cpp?rev=273237&view=auto ============================================================================== --- cfe/trunk/test/CodeGenCXX/PR28216.cpp (added) +++ cfe/trunk/test/CodeGenCXX/PR28216.cpp Mon Jun 20 22:40:16 2016 @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - | FileCheck %s + +template <typename> +struct __declspec(dllimport) S { + S(); +}; + +template <typename T> +struct __declspec(dllimport) U { + static S<T> u; +}; + +template <typename T> +S<T> U<T>::u; + +template S<int> U<int>::u; +// CHECK-NOT: define internal void @"\01??__Eu@?$U@H@@2U?$S@H@@A@YAXXZ"( + +S<int> &i = U<int>::u; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits