From: Rafael Espindola Date: Wed, 14 Mar 2018 18:19:26 +0000 (+0000) Subject: Set dso_local for NSConcreteStackBlock. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c83aac7a17dc96470a99eb42e2ad1dd736defdd;p=clang Set dso_local for NSConcreteStackBlock. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327544 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index 132314ad2d..663f1d03fd 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -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() { diff --git a/test/CodeGen/blocks-windows.c b/test/CodeGen/blocks-windows.c index 546c0bf065..2dd97ffdd2 100644 --- a/test/CodeGen/blocks-windows.c +++ b/test/CodeGen/blocks-windows.c @@ -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*