From 1193c370b4b2ba671e95ae4df20d79068e231398 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 22 Mar 2018 18:03:13 +0000 Subject: [PATCH] Set dso_local on builtin functions. The difference between CreateRuntimeFunction and CreateBuiltinFunction is that CreateBuiltinFunction would not set dllimport or dso_local. To keep the current semantics, just forward to CreateRuntimeFunction with Local=true so it doesn't add dllimport. llvm-svn: 328224 --- clang/lib/CodeGen/CodeGenModule.cpp | 8 +------- clang/test/CodeGen/mingw-long-double.c | 6 +++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index e7efd41..2748dc3 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2640,13 +2640,7 @@ CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy, StringRef Name, llvm::Constant * CodeGenModule::CreateBuiltinFunction(llvm::FunctionType *FTy, StringRef Name, llvm::AttributeList ExtraAttrs) { - llvm::Constant *C = - GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false, - /*DontDefer=*/false, /*IsThunk=*/false, ExtraAttrs); - if (auto *F = dyn_cast(C)) - if (F->empty()) - F->setCallingConv(getRuntimeCC()); - return C; + return CreateRuntimeFunction(FTy, Name, ExtraAttrs, true); } /// isTypeConstant - Determine whether an object of this type can be emitted diff --git a/clang/test/CodeGen/mingw-long-double.c b/clang/test/CodeGen/mingw-long-double.c index 5dcd9a8..6026c24 100644 --- a/clang/test/CodeGen/mingw-long-double.c +++ b/clang/test/CodeGen/mingw-long-double.c @@ -42,6 +42,6 @@ long double _Complex TestLDC(long double _Complex x) { // GNU64: define dso_local void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* %x) // MSC64: define dso_local void @TestLDC({ double, double }* noalias sret %agg.result, { double, double }* %x) -// GNU32: declare void @__mulxc3 -// GNU64: declare void @__mulxc3 -// MSC64: declare void @__muldc3 +// GNU32: declare dso_local void @__mulxc3 +// GNU64: declare dso_local void @__mulxc3 +// MSC64: declare dso_local void @__muldc3 -- 2.7.4