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

Reply via email to