mirror of https://github.com/microsoft/clang.git
Set dso_local for CFConstantStringClassReference.
This one cannot use setGVProperties since it has special logic for when it is dllimport or not. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327993 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
29c65f90ec
commit
a590e0e06d
|
@ -3810,14 +3810,13 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
|
||||||
if (!CFConstantStringClassRef) {
|
if (!CFConstantStringClassRef) {
|
||||||
llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
|
llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
|
||||||
Ty = llvm::ArrayType::get(Ty, 0);
|
Ty = llvm::ArrayType::get(Ty, 0);
|
||||||
llvm::Constant *GV =
|
llvm::GlobalValue *GV = cast<llvm::GlobalValue>(
|
||||||
CreateRuntimeVariable(Ty, "__CFConstantStringClassReference");
|
CreateRuntimeVariable(Ty, "__CFConstantStringClassReference"));
|
||||||
|
|
||||||
if (getTriple().isOSBinFormatCOFF()) {
|
if (getTriple().isOSBinFormatCOFF()) {
|
||||||
IdentifierInfo &II = getContext().Idents.get(GV->getName());
|
IdentifierInfo &II = getContext().Idents.get(GV->getName());
|
||||||
TranslationUnitDecl *TUDecl = getContext().getTranslationUnitDecl();
|
TranslationUnitDecl *TUDecl = getContext().getTranslationUnitDecl();
|
||||||
DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
|
DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
|
||||||
llvm::GlobalValue *CGV = cast<llvm::GlobalValue>(GV);
|
|
||||||
|
|
||||||
const VarDecl *VD = nullptr;
|
const VarDecl *VD = nullptr;
|
||||||
for (const auto &Result : DC->lookup(&II))
|
for (const auto &Result : DC->lookup(&II))
|
||||||
|
@ -3825,13 +3824,14 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!VD || !VD->hasAttr<DLLExportAttr>()) {
|
if (!VD || !VD->hasAttr<DLLExportAttr>()) {
|
||||||
CGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
|
GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
|
||||||
CGV->setLinkage(llvm::GlobalValue::ExternalLinkage);
|
GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
|
||||||
} else {
|
} else {
|
||||||
CGV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
|
GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
|
||||||
CGV->setLinkage(llvm::GlobalValue::ExternalLinkage);
|
GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setDSOLocal(GV);
|
||||||
|
|
||||||
// Decay array -> ptr
|
// Decay array -> ptr
|
||||||
CFConstantStringClassRef =
|
CFConstantStringClassRef =
|
||||||
|
|
|
@ -31,7 +31,7 @@ __declspec(dllimport) long __CFConstantStringClassReference[];
|
||||||
typedef struct __CFString *CFStringRef;
|
typedef struct __CFString *CFStringRef;
|
||||||
const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("string");
|
const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("string");
|
||||||
|
|
||||||
// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external dllexport global [0 x i32]
|
// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external dso_local dllexport global [0 x i32]
|
||||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dso_local dllexport global [32 x i32]
|
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dso_local dllexport global [32 x i32]
|
||||||
// CHECK-CF: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
// CHECK-CF: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
||||||
// CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
// CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
||||||
|
|
Loading…
Reference in New Issue