]> granicus.if.org Git - clang/commitdiff
Set dso_local for NSConcreteStackBlock.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 14 Mar 2018 18:19:26 +0000 (18:19 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 14 Mar 2018 18:19:26 +0000 (18:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327544 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGBlocks.cpp
test/CodeGen/blocks-windows.c

index 132314ad2dc7d86eac4b6eca19bf7e3c689dc270..663f1d03fdc8e6e3d3e2f4a8fba2cc331174c58c 100644 (file)
@@ -2586,11 +2586,11 @@ static void configureBlocksRuntimeObject(CodeGenModule &CGM,
     }
   }
 
-  if (!CGM.getLangOpts().BlocksRuntimeOptional)
-    return;
-
-  if (GV->isDeclaration() && GV->hasExternalLinkage())
+  if (CGM.getLangOpts().BlocksRuntimeOptional && GV->isDeclaration() &&
+      GV->hasExternalLinkage())
     GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
+
+  CGM.setDSOLocal(GV);
 }
 
 llvm::Constant *CodeGenModule::getBlockObjectDispose() {
index 546c0bf065ea9cb1857e4c6c5018477c24cdaaae..2dd97ffdd2f3a962a1e3f466034ffab76b9982c0 100644 (file)
@@ -67,7 +67,7 @@ int (*g(void))(void) {
   return _Block_copy(^{ ++i; return i; });
 }
 
-// CHECK-BLOCKS-IN-BLOCKS-DECL: @_NSConcreteStackBlock = external dllexport global i8*
+// CHECK-BLOCKS-IN-BLOCKS-DECL: @_NSConcreteStackBlock = external dso_local dllexport global i8*
 // CHECK-BLOCKS-IN-BLOCKS-DEFN: @_NSConcreteStackBlock = common dso_local dllexport global [5 x i32]
 // CHECK-BLOCKS-NOT-IN-BLOCKS: @_NSConcreteStackBlock = external dllimport global i8*
 // CHECK-BLOCKS-NOT-IN-BLOCKS-EXTERN: @_NSConcreteStackBlock = external dllimport global i8*