[PATCH] D75701: Initialize IsSurrogate

2020-03-05 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
respindola created this revision.
respindola added a reviewer: rsmith.

This fixes https://bugs.llvm.org/show_bug.cgi?id=45096


https://reviews.llvm.org/D75701

Files:
  clang/include/clang/Sema/Overload.h


Index: clang/include/clang/Sema/Overload.h
===
--- clang/include/clang/Sema/Overload.h
+++ clang/include/clang/Sema/Overload.h
@@ -908,7 +908,7 @@
   private:
 friend class OverloadCandidateSet;
 OverloadCandidate()
-: IsADLCandidate(CallExpr::NotADL), RewriteKind(CRK_None) {}
+: IsSurrogate(false), IsADLCandidate(CallExpr::NotADL), 
RewriteKind(CRK_None) {}
   };
 
   /// OverloadCandidateSet - A set of overload candidates, used in C++


Index: clang/include/clang/Sema/Overload.h
===
--- clang/include/clang/Sema/Overload.h
+++ clang/include/clang/Sema/Overload.h
@@ -908,7 +908,7 @@
   private:
 friend class OverloadCandidateSet;
 OverloadCandidate()
-: IsADLCandidate(CallExpr::NotADL), RewriteKind(CRK_None) {}
+: IsSurrogate(false), IsADLCandidate(CallExpr::NotADL), RewriteKind(CRK_None) {}
   };
 
   /// OverloadCandidateSet - A set of overload candidates, used in C++
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45054: Set dso_local on cfi_slowpath

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328836


https://reviews.llvm.org/D45054



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45054: Set dso_local on cfi_slowpath

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

In https://reviews.llvm.org/D45054#1052118, @eugenis wrote:

> This looks wrong. cfi_slowpath is defined in libclang_rt.cfi, which is linked 
> to the main executable. It is not always dso-local. On Android it is defined 
> in libdl.so and is never dso-local.


And we don't set cfi_local in that case. See the ITANIUM lines is the testcase.

The CodegenModule functions are named setDSOLocal, setDLLImportDLLExport, etc, 
but they only set the corresponding flags when appropriate.


https://reviews.llvm.org/D45054



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45052: Mark __cfi_check as dso_local

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328825


https://reviews.llvm.org/D45052



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45054: Set dso_local on cfi_slowpath

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo, eugenis.

https://reviews.llvm.org/D45054

Files:
  lib/CodeGen/CGExpr.cpp
  test/CodeGen/cfi-icall-cross-dso.c


Index: test/CodeGen/cfi-icall-cross-dso.c
===
--- test/CodeGen/cfi-icall-cross-dso.c
+++ test/CodeGen/cfi-icall-cross-dso.c
@@ -39,6 +39,11 @@
 // MS-DIAG: call void @__cfi_slowpath_diag(i64 4195979634929632483, i8* 
%{{.*}}, {{.*}}@[[DATA]]{{.*}}) {{.*}}, !nosanitize
 // MS-TRAP: call void @__cfi_slowpath(i64 4195979634929632483, i8* %{{.*}}) 
{{.*}}, !nosanitize
 
+// ITANIUM-DIAG: declare void @__cfi_slowpath_diag(
+// ITANIUM-TRAP: declare void @__cfi_slowpath(
+// MS-DIAG: declare dso_local void @__cfi_slowpath_diag(
+// MS-TRAP: declare dso_local void @__cfi_slowpath(
+
 void caller(void (*f)()) {
   f();
 }
Index: lib/CodeGen/CGExpr.cpp
===
--- lib/CodeGen/CGExpr.cpp
+++ lib/CodeGen/CGExpr.cpp
@@ -2975,28 +2975,29 @@
   bool WithDiag = !CGM.getCodeGenOpts().SanitizeTrap.has(Kind);
 
   llvm::CallInst *CheckCall;
+  llvm::Constant *SlowPathFn;
   if (WithDiag) {
 llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
 auto *InfoPtr =
 new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false,
  llvm::GlobalVariable::PrivateLinkage, Info);
 InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
 CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr);
 
-llvm::Constant *SlowPathDiagFn = CGM.getModule().getOrInsertFunction(
+SlowPathFn = CGM.getModule().getOrInsertFunction(
 "__cfi_slowpath_diag",
 llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy, Int8PtrTy},
 false));
 CheckCall = Builder.CreateCall(
-SlowPathDiagFn,
-{TypeId, Ptr, Builder.CreateBitCast(InfoPtr, Int8PtrTy)});
+SlowPathFn, {TypeId, Ptr, Builder.CreateBitCast(InfoPtr, Int8PtrTy)});
   } else {
-llvm::Constant *SlowPathFn = CGM.getModule().getOrInsertFunction(
+SlowPathFn = CGM.getModule().getOrInsertFunction(
 "__cfi_slowpath",
 llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy}, false));
 CheckCall = Builder.CreateCall(SlowPathFn, {TypeId, Ptr});
   }
 
+  CGM.setDSOLocal(cast(SlowPathFn->stripPointerCasts()));
   CheckCall->setDoesNotThrow();
 
   EmitBlock(Cont);


Index: test/CodeGen/cfi-icall-cross-dso.c
===
--- test/CodeGen/cfi-icall-cross-dso.c
+++ test/CodeGen/cfi-icall-cross-dso.c
@@ -39,6 +39,11 @@
 // MS-DIAG: call void @__cfi_slowpath_diag(i64 4195979634929632483, i8* %{{.*}}, {{.*}}@[[DATA]]{{.*}}) {{.*}}, !nosanitize
 // MS-TRAP: call void @__cfi_slowpath(i64 4195979634929632483, i8* %{{.*}}) {{.*}}, !nosanitize
 
+// ITANIUM-DIAG: declare void @__cfi_slowpath_diag(
+// ITANIUM-TRAP: declare void @__cfi_slowpath(
+// MS-DIAG: declare dso_local void @__cfi_slowpath_diag(
+// MS-TRAP: declare dso_local void @__cfi_slowpath(
+
 void caller(void (*f)()) {
   f();
 }
Index: lib/CodeGen/CGExpr.cpp
===
--- lib/CodeGen/CGExpr.cpp
+++ lib/CodeGen/CGExpr.cpp
@@ -2975,28 +2975,29 @@
   bool WithDiag = !CGM.getCodeGenOpts().SanitizeTrap.has(Kind);
 
   llvm::CallInst *CheckCall;
+  llvm::Constant *SlowPathFn;
   if (WithDiag) {
 llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
 auto *InfoPtr =
 new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false,
  llvm::GlobalVariable::PrivateLinkage, Info);
 InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
 CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr);
 
-llvm::Constant *SlowPathDiagFn = CGM.getModule().getOrInsertFunction(
+SlowPathFn = CGM.getModule().getOrInsertFunction(
 "__cfi_slowpath_diag",
 llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy, Int8PtrTy},
 false));
 CheckCall = Builder.CreateCall(
-SlowPathDiagFn,
-{TypeId, Ptr, Builder.CreateBitCast(InfoPtr, Int8PtrTy)});
+SlowPathFn, {TypeId, Ptr, Builder.CreateBitCast(InfoPtr, Int8PtrTy)});
   } else {
-llvm::Constant *SlowPathFn = CGM.getModule().getOrInsertFunction(
+SlowPathFn = CGM.getModule().getOrInsertFunction(
 "__cfi_slowpath",
 llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy}, false));
 CheckCall = Builder.CreateCall(SlowPathFn, {TypeId, Ptr});
   }
 
+  CGM.setDSOLocal(cast(SlowPathFn->stripPointerCasts()));
   CheckCall->setDoesNotThrow();
 
   EmitBlock(Cont);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45052: Mark __cfi_check as dso_local

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

https://reviews.llvm.org/D45052

Files:
  lib/CodeGen/CGExpr.cpp
  test/CodeGen/cfi-icall-cross-dso.c


Index: test/CodeGen/cfi-icall-cross-dso.c
===
--- test/CodeGen/cfi-icall-cross-dso.c
+++ test/CodeGen/cfi-icall-cross-dso.c
@@ -66,6 +66,9 @@
 inline void foo() {}
 void bar() { foo(); }
 
+// ITANIUM: define weak void @__cfi_check
+// MS: define weak dso_local void @__cfi_check
+
 // CHECK: !{i32 4, !"Cross-DSO CFI", i32 1}
 
 // Check that the type entries are correct.
Index: lib/CodeGen/CGExpr.cpp
===
--- lib/CodeGen/CGExpr.cpp
+++ lib/CodeGen/CGExpr.cpp
@@ -3010,6 +3010,7 @@
   llvm::Function *F = llvm::Function::Create(
   llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy, Int8PtrTy}, false),
   llvm::GlobalValue::WeakAnyLinkage, "__cfi_check", M);
+  CGM.setDSOLocal(F);
   llvm::BasicBlock *BB = llvm::BasicBlock::Create(Ctx, "entry", F);
   // FIXME: consider emitting an intrinsic call like
   // call void @llvm.cfi_check(i64 %0, i8* %1, i8* %2)


Index: test/CodeGen/cfi-icall-cross-dso.c
===
--- test/CodeGen/cfi-icall-cross-dso.c
+++ test/CodeGen/cfi-icall-cross-dso.c
@@ -66,6 +66,9 @@
 inline void foo() {}
 void bar() { foo(); }
 
+// ITANIUM: define weak void @__cfi_check
+// MS: define weak dso_local void @__cfi_check
+
 // CHECK: !{i32 4, !"Cross-DSO CFI", i32 1}
 
 // Check that the type entries are correct.
Index: lib/CodeGen/CGExpr.cpp
===
--- lib/CodeGen/CGExpr.cpp
+++ lib/CodeGen/CGExpr.cpp
@@ -3010,6 +3010,7 @@
   llvm::Function *F = llvm::Function::Create(
   llvm::FunctionType::get(VoidTy, {Int64Ty, Int8PtrTy, Int8PtrTy}, false),
   llvm::GlobalValue::WeakAnyLinkage, "__cfi_check", M);
+  CGM.setDSOLocal(F);
   llvm::BasicBlock *BB = llvm::BasicBlock::Create(Ctx, "entry", F);
   // FIXME: consider emitting an intrinsic call like
   // call void @llvm.cfi_check(i64 %0, i8* %1, i8* %2)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44723: Set dso_local when clearing dllimport

2018-03-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328801


https://reviews.llvm.org/D44723



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44723: Set dso_local when clearing dllimport

2018-03-26 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

ping


https://reviews.llvm.org/D44723



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44805: Set dso_local on __ImageBase

2018-03-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328266


https://reviews.llvm.org/D44805



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44805: Set dso_local on __ImageBase

2018-03-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: echristo, rnk.

https://reviews.llvm.org/D44805

Files:
  lib/CodeGen/MicrosoftCXXABI.cpp
  test/CodeGenCXX/dllexport.cpp


Index: test/CodeGenCXX/dllexport.cpp
===
--- test/CodeGenCXX/dllexport.cpp
+++ test/CodeGenCXX/dllexport.cpp
@@ -43,6 +43,8 @@
 
 // GNU-DAG: @_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global
 
+// M64-DAG: @__ImageBase = external dso_local constant i8
+
 // dllexport implies a definition.
 // MSC-DAG: @"?GlobalDef@@3HA" = dso_local dllexport global i32 0, align 4
 // GNU-DAG: @GlobalDef= dso_local dllexport global i32 0, align 4
Index: lib/CodeGen/MicrosoftCXXABI.cpp
===
--- lib/CodeGen/MicrosoftCXXABI.cpp
+++ lib/CodeGen/MicrosoftCXXABI.cpp
@@ -523,10 +523,12 @@
 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name))
   return GV;
 
-return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
-/*isConstant=*/true,
-llvm::GlobalValue::ExternalLinkage,
-/*Initializer=*/nullptr, Name);
+auto *GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
+/*isConstant=*/true,
+llvm::GlobalValue::ExternalLinkage,
+/*Initializer=*/nullptr, Name);
+CGM.setDSOLocal(GV);
+return GV;
   }
 
   llvm::Constant *getImageRelativeConstant(llvm::Constant *PtrVal) {


Index: test/CodeGenCXX/dllexport.cpp
===
--- test/CodeGenCXX/dllexport.cpp
+++ test/CodeGenCXX/dllexport.cpp
@@ -43,6 +43,8 @@
 
 // GNU-DAG: @_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global
 
+// M64-DAG: @__ImageBase = external dso_local constant i8
+
 // dllexport implies a definition.
 // MSC-DAG: @"?GlobalDef@@3HA" = dso_local dllexport global i32 0, align 4
 // GNU-DAG: @GlobalDef= dso_local dllexport global i32 0, align 4
Index: lib/CodeGen/MicrosoftCXXABI.cpp
===
--- lib/CodeGen/MicrosoftCXXABI.cpp
+++ lib/CodeGen/MicrosoftCXXABI.cpp
@@ -523,10 +523,12 @@
 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name))
   return GV;
 
-return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
-/*isConstant=*/true,
-llvm::GlobalValue::ExternalLinkage,
-/*Initializer=*/nullptr, Name);
+auto *GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
+/*isConstant=*/true,
+llvm::GlobalValue::ExternalLinkage,
+/*Initializer=*/nullptr, Name);
+CGM.setDSOLocal(GV);
+return GV;
   }
 
   llvm::Constant *getImageRelativeConstant(llvm::Constant *PtrVal) {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44796: Set dso_local on vtables

2018-03-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola accepted this revision.
espindola added a comment.

328238


https://reviews.llvm.org/D44796



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44796: Set dso_local on vtables

2018-03-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

https://reviews.llvm.org/D44796

Files:
  lib/CodeGen/ItaniumCXXABI.cpp
  test/CodeGenCXX/dllexport.cpp


Index: test/CodeGenCXX/dllexport.cpp
===
--- test/CodeGenCXX/dllexport.cpp
+++ test/CodeGenCXX/dllexport.cpp
@@ -41,6 +41,8 @@
 // GNU-NOT: @ExternGlobalDecl
 __declspec(dllexport) extern int ExternGlobalDecl;
 
+// GNU-DAG: @_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global
+
 // dllexport implies a definition.
 // MSC-DAG: @"?GlobalDef@@3HA" = dso_local dllexport global i32 0, align 4
 // GNU-DAG: @GlobalDef= dso_local dllexport global i32 0, align 4
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2848,6 +2848,7 @@
 
   const char *VTableName = nullptr;
 
+  const CXXRecordDecl *RD = nullptr;
   switch (Ty->getTypeClass()) {
 #define TYPE(Class, Base)
 #define ABSTRACT_TYPE(Class, Base)
@@ -2899,8 +2900,7 @@
 break;
 
   case Type::Record: {
-const CXXRecordDecl *RD =
-  cast(cast(Ty)->getDecl());
+RD = cast(cast(Ty)->getDecl());
 
 if (!RD->hasDefinition() || !RD->getNumBases()) {
   VTableName = ClassTypeInfo;
@@ -2948,6 +2948,7 @@
 
   llvm::Constant *VTable =
 CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
+  CGM.setGVProperties(cast(VTable->stripPointerCasts()), 
RD);
 
   llvm::Type *PtrDiffTy =
 CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());


Index: test/CodeGenCXX/dllexport.cpp
===
--- test/CodeGenCXX/dllexport.cpp
+++ test/CodeGenCXX/dllexport.cpp
@@ -41,6 +41,8 @@
 // GNU-NOT: @ExternGlobalDecl
 __declspec(dllexport) extern int ExternGlobalDecl;
 
+// GNU-DAG: @_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global
+
 // dllexport implies a definition.
 // MSC-DAG: @"?GlobalDef@@3HA" = dso_local dllexport global i32 0, align 4
 // GNU-DAG: @GlobalDef= dso_local dllexport global i32 0, align 4
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2848,6 +2848,7 @@
 
   const char *VTableName = nullptr;
 
+  const CXXRecordDecl *RD = nullptr;
   switch (Ty->getTypeClass()) {
 #define TYPE(Class, Base)
 #define ABSTRACT_TYPE(Class, Base)
@@ -2899,8 +2900,7 @@
 break;
 
   case Type::Record: {
-const CXXRecordDecl *RD =
-  cast(cast(Ty)->getDecl());
+RD = cast(cast(Ty)->getDecl());
 
 if (!RD->hasDefinition() || !RD->getNumBases()) {
   VTableName = ClassTypeInfo;
@@ -2948,6 +2948,7 @@
 
   llvm::Constant *VTable =
 CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
+  CGM.setGVProperties(cast(VTable->stripPointerCasts()), RD);
 
   llvm::Type *PtrDiffTy =
 CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44710: Set dso_local on builtin functions

2018-03-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328224


https://reviews.llvm.org/D44710



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44723: Set dso_local when clearing dllimport

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

https://reviews.llvm.org/D44723

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGenCXX/dllimport.cpp


Index: test/CodeGenCXX/dllimport.cpp
===
--- test/CodeGenCXX/dllimport.cpp
+++ test/CodeGenCXX/dllimport.cpp
@@ -203,6 +203,8 @@
 // Functions
 
//===--===//
 
+// GNU-DAG: declare dso_local void @_ZdlPv(i8*)
+
 // Import function declaration.
 // MSC-DAG: declare dllimport void @"?decl@@YAXXZ"()
 // GNU-DAG: declare dllimport void @_Z4declv()
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2398,8 +2398,10 @@
 }
 
 // Handle dropped DLL attributes.
-if (D && !D->hasAttr() && !D->hasAttr())
+if (D && !D->hasAttr() && !D->hasAttr()) {
   Entry->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
+  setDSOLocal(Entry);
+}
 
 // If there are two attempts to define the same mangled name, issue an
 // error.


Index: test/CodeGenCXX/dllimport.cpp
===
--- test/CodeGenCXX/dllimport.cpp
+++ test/CodeGenCXX/dllimport.cpp
@@ -203,6 +203,8 @@
 // Functions
 //===--===//
 
+// GNU-DAG: declare dso_local void @_ZdlPv(i8*)
+
 // Import function declaration.
 // MSC-DAG: declare dllimport void @"?decl@@YAXXZ"()
 // GNU-DAG: declare dllimport void @_Z4declv()
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2398,8 +2398,10 @@
 }
 
 // Handle dropped DLL attributes.
-if (D && !D->hasAttr() && !D->hasAttr())
+if (D && !D->hasAttr() && !D->hasAttr()) {
   Entry->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
+  setDSOLocal(Entry);
+}
 
 // If there are two attempts to define the same mangled name, issue an
 // error.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44712: Set dso_local on runtime variables

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r328068


https://reviews.llvm.org/D44712



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44712: Set dso_local on runtime variables

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo, eli.friedman.

https://reviews.llvm.org/D44712

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGenCXX/ubsan-vtable-checks.cpp


Index: test/CodeGenCXX/ubsan-vtable-checks.cpp
===
--- test/CodeGenCXX/ubsan-vtable-checks.cpp
+++ test/CodeGenCXX/ubsan-vtable-checks.cpp
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-linux -emit-llvm 
-fsanitize=null %s -o - | FileCheck %s --check-prefix=CHECK 
--check-prefix=CHECK-NULL --check-prefix=ITANIUM
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm 
-fsanitize=null %s -o - | FileCheck %s --check-prefix=CHECK 
--check-prefix=CHECK-NULL --check-prefix=MSABI
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-linux -emit-llvm 
-fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK 
--check-prefix=CHECK-VPTR --check-prefix=ITANIUM
-// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm 
-fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK 
--check-prefix=CHECK-VPTR --check-prefix=MSABI
+// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm 
-fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK 
--check-prefix=CHECK-VPTR --check-prefix=MSABI  --check-prefix=CHECK-VPTR-MS
 struct T {
   virtual ~T() {}
   virtual int v() { return 1; }
@@ -14,6 +14,8 @@
 
 U::~U() {}
 
+// CHECK-VPTR-MS: @__ubsan_vptr_type_cache = external dso_local
+
 // ITANIUM: define i32 @_Z5get_vP1T
 // MSABI: define dso_local i32 @"?get_v
 int get_v(T* t) {
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2953,7 +2953,10 @@
 llvm::Constant *
 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
  StringRef Name) {
-  return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), 
nullptr);
+  auto *Ret =
+  GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), nullptr);
+  setDSOLocal(cast(Ret->stripPointerCasts()));
+  return Ret;
 }
 
 void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {


Index: test/CodeGenCXX/ubsan-vtable-checks.cpp
===
--- test/CodeGenCXX/ubsan-vtable-checks.cpp
+++ test/CodeGenCXX/ubsan-vtable-checks.cpp
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-linux -emit-llvm -fsanitize=null %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NULL --check-prefix=ITANIUM
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm -fsanitize=null %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NULL --check-prefix=MSABI
 // RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-linux -emit-llvm -fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-VPTR --check-prefix=ITANIUM
-// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm -fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-VPTR --check-prefix=MSABI
+// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm -fsanitize=null,vptr %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-VPTR --check-prefix=MSABI  --check-prefix=CHECK-VPTR-MS
 struct T {
   virtual ~T() {}
   virtual int v() { return 1; }
@@ -14,6 +14,8 @@
 
 U::~U() {}
 
+// CHECK-VPTR-MS: @__ubsan_vptr_type_cache = external dso_local
+
 // ITANIUM: define i32 @_Z5get_vP1T
 // MSABI: define dso_local i32 @"?get_v
 int get_v(T* t) {
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2953,7 +2953,10 @@
 llvm::Constant *
 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
  StringRef Name) {
-  return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), nullptr);
+  auto *Ret =
+  GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), nullptr);
+  setDSOLocal(cast(Ret->stripPointerCasts()));
+  return Ret;
 }
 
 void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44706: Delete BuiltinCC

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r328050


https://reviews.llvm.org/D44706



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44710: Set dso_local on builtin functions

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

With https://reviews.llvm.org/D44706 we can just forward to 
CreateRuntimeFunction.


https://reviews.llvm.org/D44710

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGen/mingw-long-double.c


Index: test/CodeGen/mingw-long-double.c
===
--- test/CodeGen/mingw-long-double.c
+++ test/CodeGen/mingw-long-double.c
@@ -42,6 +42,6 @@
 // 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
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2640,13 +2640,7 @@
 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


Index: test/CodeGen/mingw-long-double.c
===
--- test/CodeGen/mingw-long-double.c
+++ test/CodeGen/mingw-long-double.c
@@ -42,6 +42,6 @@
 // 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
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2640,13 +2640,7 @@
 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
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44706: Delete BuiltinCC

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

It is always identical to RuntimeCC.


https://reviews.llvm.org/D44706

Files:
  lib/CodeGen/ABIInfo.h
  lib/CodeGen/CGExprComplex.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/CodeGenTypeCache.h
  lib/CodeGen/TargetInfo.cpp


Index: lib/CodeGen/TargetInfo.cpp
===
--- lib/CodeGen/TargetInfo.cpp
+++ lib/CodeGen/TargetInfo.cpp
@@ -5690,18 +5690,6 @@
   llvm::CallingConv::ID abiCC = getABIDefaultCC();
   if (abiCC != getLLVMDefaultCC())
 RuntimeCC = abiCC;
-
-  // AAPCS apparently requires runtime support functions to be soft-float, but
-  // that's almost certainly for historic reasons (Thumb1 not supporting VFP
-  // most likely). It's more convenient for AAPCS16_VFP to be hard-float.
-
-  // The Run-time ABI for the ARM Architecture section 4.1.2 requires
-  // AEABI-complying FP helper functions to use the base AAPCS.
-  // These AEABI functions are expanded in the ARM llvm backend, all the 
builtin
-  // support functions emitted by clang such as the _Complex helpers follow the
-  // abiCC.
-  if (abiCC != getLLVMDefaultCC())
-  BuiltinCC = abiCC;
 }
 
 ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty,
Index: lib/CodeGen/CodeGenTypeCache.h
===
--- lib/CodeGen/CodeGenTypeCache.h
+++ lib/CodeGen/CodeGenTypeCache.h
@@ -112,8 +112,6 @@
 
   llvm::CallingConv::ID RuntimeCC;
   llvm::CallingConv::ID getRuntimeCC() const { return RuntimeCC; }
-  llvm::CallingConv::ID BuiltinCC;
-  llvm::CallingConv::ID getBuiltinCC() const { return BuiltinCC; }
 
   LangAS getASTAllocaAddressSpace() const { return ASTAllocaAddressSpace; }
 };
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -123,7 +123,6 @@
   ASTAllocaAddressSpace = getTargetCodeGenInfo().getASTAllocaAddressSpace();
 
   RuntimeCC = getTargetCodeGenInfo().getABIInfo().getRuntimeCC();
-  BuiltinCC = getTargetCodeGenInfo().getABIInfo().getBuiltinCC();
 
   if (LangOpts.ObjC1)
 createObjCRuntime();
@@ -2646,7 +2645,7 @@
   /*DontDefer=*/false, /*IsThunk=*/false, 
ExtraAttrs);
   if (auto *F = dyn_cast(C))
 if (F->empty())
-  F->setCallingConv(getBuiltinCC());
+  F->setCallingConv(getRuntimeCC());
   return C;
 }
 
Index: lib/CodeGen/CGExprComplex.cpp
===
--- lib/CodeGen/CGExprComplex.cpp
+++ lib/CodeGen/CGExprComplex.cpp
@@ -629,7 +629,7 @@
 
   llvm::Instruction *Call;
   RValue Res = CGF.EmitCall(FuncInfo, Callee, ReturnValueSlot(), Args, );
-  cast(Call)->setCallingConv(CGF.CGM.getBuiltinCC());
+  cast(Call)->setCallingConv(CGF.CGM.getRuntimeCC());
   return Res.getComplexVal();
 }
 
Index: lib/CodeGen/ABIInfo.h
===
--- lib/CodeGen/ABIInfo.h
+++ lib/CodeGen/ABIInfo.h
@@ -53,12 +53,9 @@
 CodeGen::CodeGenTypes 
   protected:
 llvm::CallingConv::ID RuntimeCC;
-llvm::CallingConv::ID BuiltinCC;
   public:
 ABIInfo(CodeGen::CodeGenTypes )
-  : CGT(cgt),
-RuntimeCC(llvm::CallingConv::C),
-BuiltinCC(llvm::CallingConv::C) {}
+: CGT(cgt), RuntimeCC(llvm::CallingConv::C) {}
 
 virtual ~ABIInfo();
 
@@ -77,11 +74,6 @@
   return RuntimeCC;
 }
 
-/// Return the calling convention to use for compiler builtins
-llvm::CallingConv::ID getBuiltinCC() const {
-  return BuiltinCC;
-}
-
 virtual void computeInfo(CodeGen::CGFunctionInfo ) const = 0;
 
 /// EmitVAArg - Emit the target dependent code to load a value of


Index: lib/CodeGen/TargetInfo.cpp
===
--- lib/CodeGen/TargetInfo.cpp
+++ lib/CodeGen/TargetInfo.cpp
@@ -5690,18 +5690,6 @@
   llvm::CallingConv::ID abiCC = getABIDefaultCC();
   if (abiCC != getLLVMDefaultCC())
 RuntimeCC = abiCC;
-
-  // AAPCS apparently requires runtime support functions to be soft-float, but
-  // that's almost certainly for historic reasons (Thumb1 not supporting VFP
-  // most likely). It's more convenient for AAPCS16_VFP to be hard-float.
-
-  // The Run-time ABI for the ARM Architecture section 4.1.2 requires
-  // AEABI-complying FP helper functions to use the base AAPCS.
-  // These AEABI functions are expanded in the ARM llvm backend, all the builtin
-  // support functions emitted by clang such as the _Complex helpers follow the
-  // abiCC.
-  if (abiCC != getLLVMDefaultCC())
-  BuiltinCC = abiCC;
 }
 
 ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty,
Index: lib/CodeGen/CodeGenTypeCache.h
===
--- lib/CodeGen/CodeGenTypeCache.h
+++ lib/CodeGen/CodeGenTypeCache.h
@@ -112,8 +112,6 @@
 
   llvm::CallingConv::ID 

[PATCH] D44689: Set dso_local on string literals

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r328040


https://reviews.llvm.org/D44689



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44688: Set dso_local for runtime functions

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

328036


https://reviews.llvm.org/D44688



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44688: Set dso_local for runtime functions

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

In https://reviews.llvm.org/D44688#1043575, @rnk wrote:

> lgtm
>
> We don't assume these are `dso_local` on Linux, right?


Depends on shouldAssumeDSOLocal. We do if there is no -fPIC or -fPIE for 
example.


https://reviews.llvm.org/D44688



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44688: Set dso_local for runtime functions

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

This is another case where there is special logic for adding dllimport and so 
we cannot use setGVProperties.


https://reviews.llvm.org/D44688

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGenCXX/runtime-dllstorage.cpp


Index: test/CodeGenCXX/runtime-dllstorage.cpp
===
--- test/CodeGenCXX/runtime-dllstorage.cpp
+++ test/CodeGenCXX/runtime-dllstorage.cpp
@@ -106,16 +106,16 @@
 }
 
 // CHECK-MS-DAG: @_Init_thread_epoch = external thread_local global i32
-// CHECK-MS-DAG: declare i32 @__tlregdtor(void ()*)
-// CHECK-MS-DAG: declare i32 @atexit(void ()*)
+// CHECK-MS-DAG: declare dso_local i32 @__tlregdtor(void ()*)
+// CHECK-MS-DAG: declare dso_local i32 @atexit(void ()*)
 // CHECK-MS-DYNAMIC-DAG: declare dllimport {{.*}} void @_CxxThrowException
 // CHECK-MS-STATIC-DAG: declare {{.*}} void @_CxxThrowException
 // CHECK-MS-DAG: declare dso_local noalias i8* @"??2@YAPAXI@Z"
-// CHECK-MS-DAG: declare void @_Init_thread_header(i32*)
-// CHECK-MS-DAG: declare void @_Init_thread_footer(i32*)
+// CHECK-MS-DAG: declare dso_local void @_Init_thread_header(i32*)
+// CHECK-MS-DAG: declare dso_local void @_Init_thread_footer(i32*)
 
 // CHECK-IA-DAG: @_ZTH1t = dso_local alias void (), void ()* @__tls_init
-// CHECK-IA-DAG: declare i32 @__gxx_personality_v0(...)
+// CHECK-IA-DAG: declare dso_local i32 @__gxx_personality_v0(...)
 // CHECK-IA-DAG: define linkonce_odr hidden void @__clang_call_terminate(i8*)
 
 // CHECK-DYNAMIC-IA-DAG: declare dllimport i32 @__cxa_thread_atexit(void 
(i8*)*, i8*, i8*)
@@ -135,25 +135,25 @@
 // CHECK-DYNAMIC-IMPORT-IA-DAG: declare dllimport void 
@__cxa_guard_release(i64*)
 // CHECK-DYNAMIC-EXPORT-IA-DAG: declare dllimport void 
@__cxa_guard_release(i64*)
 // CHECK-DYANMIC-IA-DAG: declare dllimport void @_ZSt9terminatev()
-// CHECK-DYNAMIC-NODECL-IA-DAG: declare void @_ZSt9terminatev()
+// CHECK-DYNAMIC-NODECL-IA-DAG: declare dso_local void @_ZSt9terminatev()
 // CHECK-DYNAMIC-IMPORT-IA-DAG: declare dllimport void @_ZSt9terminatev()
 // CHECK-DYNAMIC-EXPORT-IA-DAG: declare dso_local dllexport void 
@_ZSt9terminatev()
 
-// CHECK-STATIC-IA-DAG: declare i32 @__cxa_thread_atexit(void (i8*)*, i8*, i8*)
-// CHECK-STATIC-IA-DAG: declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)
-// CHECK-STATIC-IA-DAG: declare i8* @__cxa_allocate_exception(i32)
-// CHECK-STATIC-IA-DAG: declare void @__cxa_throw(i8*, i8*, i8*)
-// CHECK-STATIC-DECL-IA-DAG: declare i32 @__cxa_guard_acquire(i64*)
-// CHECK-STATIC-NODECL-IA-DAG: declare i32 @__cxa_guard_acquire(i64*)
-// CHECK-STATIC-IMPORT-IA-DAG: declare i32 @__cxa_guard_acquire(i64*)
+// CHECK-STATIC-IA-DAG: declare dso_local i32 @__cxa_thread_atexit(void 
(i8*)*, i8*, i8*)
+// CHECK-STATIC-IA-DAG: declare dso_local i32 @__cxa_atexit(void (i8*)*, i8*, 
i8*)
+// CHECK-STATIC-IA-DAG: declare dso_local i8* @__cxa_allocate_exception(i32)
+// CHECK-STATIC-IA-DAG: declare dso_local void @__cxa_throw(i8*, i8*, i8*)
+// CHECK-STATIC-DECL-IA-DAG: declare dso_local i32 @__cxa_guard_acquire(i64*)
+// CHECK-STATIC-NODECL-IA-DAG: declare dso_local i32 @__cxa_guard_acquire(i64*)
+// CHECK-STATIC-IMPORT-IA-DAG: declare dso_local i32 @__cxa_guard_acquire(i64*)
 // CHECK-STATIC-EXPORT-IA-DAG: declare dso_local i32 @__cxa_guard_acquire(i64*)
 // CHECK-IA-DAG: declare dso_local noalias i8* @_Znwj(i32)
-// CHECK-STATIC-DECL-IA-DAG: declare void @__cxa_guard_release(i64*)
-// CHECK-STATIC-NODECL-IA-DAG: declare void @__cxa_guard_release(i64*)
-// CHECK-STATIC-IMPORT-IA-DAG: declare void @__cxa_guard_release(i64*)
+// CHECK-STATIC-DECL-IA-DAG: declare dso_local void @__cxa_guard_release(i64*)
+// CHECK-STATIC-NODECL-IA-DAG: declare dso_local void 
@__cxa_guard_release(i64*)
+// CHECK-STATIC-IMPORT-IA-DAG: declare dso_local void 
@__cxa_guard_release(i64*)
 // CHECK-STATIC-EXPORT-IA-DAG: declare dso_local void 
@__cxa_guard_release(i64*)
-// CHECK-STATIC-IA-DAG: declare void @_ZSt9terminatev()
-// CHECK-STATIC-NODECL-IA-DAG: declare void @_ZSt9terminatev()
-// CHECK-STATIC-IMPORT-IA-DAG: declare void @_ZSt9terminatev()
+// CHECK-STATIC-IA-DAG: declare dso_local void @_ZSt9terminatev()
+// CHECK-STATIC-NODECL-IA-DAG: declare dso_local void @_ZSt9terminatev()
+// CHECK-STATIC-IMPORT-IA-DAG: declare dso_local void @_ZSt9terminatev()
 // CHECK-STATIC-EXPORT-IA-DAG: declare dso_local dllexport void 
@_ZSt9terminatev()
 
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -2629,6 +2629,7 @@
   F->setLinkage(llvm::GlobalValue::ExternalLinkage);
 }
   }
+  setDSOLocal(F);
 }
   }
 


Index: test/CodeGenCXX/runtime-dllstorage.cpp
===
--- test/CodeGenCXX/runtime-dllstorage.cpp
+++ test/CodeGenCXX/runtime-dllstorage.cpp
@@ -106,16 +106,16 @@
 

[PATCH] D44491: Set dso_local for CFConstantStringClassReference

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

327993


https://reviews.llvm.org/D44491



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44649: Set dso_local for guid decls

2018-03-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

327991


https://reviews.llvm.org/D44649



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44491: Set dso_local for CFConstantStringClassReference

2018-03-19 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

ping


https://reviews.llvm.org/D44491



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44649: Set dso_local for guid decls

2018-03-19 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

https://reviews.llvm.org/D44649

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGenCXX/microsoft-templ-uuidof.cpp


Index: test/CodeGenCXX/microsoft-templ-uuidof.cpp
===
--- test/CodeGenCXX/microsoft-templ-uuidof.cpp
+++ test/CodeGenCXX/microsoft-templ-uuidof.cpp
@@ -15,6 +15,8 @@
 
 struct __declspec(uuid("{----}")) C {};
 
+// CHECK-DAG: @_GUID_____ = linkonce_odr 
dso_local
+
 const _GUID  = __uuidof(X);
 // CHECK-DAG:  @"?xa@@3ABU_GUID@@B" = {{.*}} 
@_GUID_____
 
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -1921,6 +1921,7 @@
   /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
   if (supportsCOMDAT())
 GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
+  setDSOLocal(GV);
   return ConstantAddress(GV, Alignment);
 }
 


Index: test/CodeGenCXX/microsoft-templ-uuidof.cpp
===
--- test/CodeGenCXX/microsoft-templ-uuidof.cpp
+++ test/CodeGenCXX/microsoft-templ-uuidof.cpp
@@ -15,6 +15,8 @@
 
 struct __declspec(uuid("{----}")) C {};
 
+// CHECK-DAG: @_GUID_____ = linkonce_odr dso_local
+
 const _GUID  = __uuidof(X);
 // CHECK-DAG:  @"?xa@@3ABU_GUID@@B" = {{.*}} @_GUID_____
 
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -1921,6 +1921,7 @@
   /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
   if (supportsCOMDAT())
 GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
+  setDSOLocal(GV);
   return ConstantAddress(GV, Alignment);
 }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44491: Set dso_local for CFConstantStringClassReference

2018-03-14 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

This one cannot use setGVProperties since it has special logic for when it is 
dllimport or not.


https://reviews.llvm.org/D44491

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGen/cfstring-windows.c


Index: test/CodeGen/cfstring-windows.c
===
--- test/CodeGen/cfstring-windows.c
+++ test/CodeGen/cfstring-windows.c
@@ -31,7 +31,7 @@
 typedef struct __CFString *CFStringRef;
 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: @__CFConstantStringClassReference = external dllimport global [0 
x i32]
 // CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport 
global [0 x i32]
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -3795,28 +3795,28 @@
   if (!CFConstantStringClassRef) {
 llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
 Ty = llvm::ArrayType::get(Ty, 0);
-llvm::Constant *GV =
-CreateRuntimeVariable(Ty, "__CFConstantStringClassReference");
+llvm::GlobalValue *GV = cast(
+CreateRuntimeVariable(Ty, "__CFConstantStringClassReference"));
 
 if (getTriple().isOSBinFormatCOFF()) {
   IdentifierInfo  = getContext().Idents.get(GV->getName());
   TranslationUnitDecl *TUDecl = getContext().getTranslationUnitDecl();
   DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
-  llvm::GlobalValue *CGV = cast(GV);
 
   const VarDecl *VD = nullptr;
   for (const auto  : DC->lookup())
 if ((VD = dyn_cast(Result)))
   break;
 
   if (!VD || !VD->hasAttr()) {
-CGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
-CGV->setLinkage(llvm::GlobalValue::ExternalLinkage);
+GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
+GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
   } else {
-CGV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
-CGV->setLinkage(llvm::GlobalValue::ExternalLinkage);
+GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
+GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
   }
 }
+setDSOLocal(GV);
 
 // Decay array -> ptr
 CFConstantStringClassRef =


Index: test/CodeGen/cfstring-windows.c
===
--- test/CodeGen/cfstring-windows.c
+++ test/CodeGen/cfstring-windows.c
@@ -31,7 +31,7 @@
 typedef struct __CFString *CFStringRef;
 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: @__CFConstantStringClassReference = external dllimport global [0 x i32]
 // CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport global [0 x i32]
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -3795,28 +3795,28 @@
   if (!CFConstantStringClassRef) {
 llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
 Ty = llvm::ArrayType::get(Ty, 0);
-llvm::Constant *GV =
-CreateRuntimeVariable(Ty, "__CFConstantStringClassReference");
+llvm::GlobalValue *GV = cast(
+CreateRuntimeVariable(Ty, "__CFConstantStringClassReference"));
 
 if (getTriple().isOSBinFormatCOFF()) {
   IdentifierInfo  = getContext().Idents.get(GV->getName());
   TranslationUnitDecl *TUDecl = getContext().getTranslationUnitDecl();
   DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
-  llvm::GlobalValue *CGV = cast(GV);
 
   const VarDecl *VD = nullptr;
   for (const auto  : DC->lookup())
 if ((VD = dyn_cast(Result)))
   break;
 
   if (!VD || !VD->hasAttr()) {
-CGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
-CGV->setLinkage(llvm::GlobalValue::ExternalLinkage);
+GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
+GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
   } else {
-CGV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
-  

[PATCH] D44482: Set dso_local for NSConcreteStackBlock

2018-03-14 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r327544


https://reviews.llvm.org/D44482



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44233: Set dso_local on external rtti GVs

2018-03-14 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r327543


https://reviews.llvm.org/D44233



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44482: Set dso_local for NSConcreteStackBlock

2018-03-14 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, echristo.

https://reviews.llvm.org/D44482

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


Index: test/CodeGen/blocks-windows.c
===
--- test/CodeGen/blocks-windows.c
+++ test/CodeGen/blocks-windows.c
@@ -67,7 +67,7 @@
   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*
Index: lib/CodeGen/CGBlocks.cpp
===
--- lib/CodeGen/CGBlocks.cpp
+++ lib/CodeGen/CGBlocks.cpp
@@ -2586,11 +2586,11 @@
 }
   }
 
-  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: test/CodeGen/blocks-windows.c
===
--- test/CodeGen/blocks-windows.c
+++ test/CodeGen/blocks-windows.c
@@ -67,7 +67,7 @@
   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*
Index: lib/CodeGen/CGBlocks.cpp
===
--- lib/CodeGen/CGBlocks.cpp
+++ lib/CodeGen/CGBlocks.cpp
@@ -2586,11 +2586,11 @@
 }
   }
 
-  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() {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44233: Set dso_local on external rtti GVs

2018-03-13 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

ping


https://reviews.llvm.org/D44233



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44233: Set dso_local on external rtti GVs

2018-03-07 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added a reviewer: rnk.

In this particular case it would be possible to just add an else with 
CGM.setDSOLocal(GV),  but it seems better to have as many callers as possible 
just call setGVProperties so that we can centralize the logic there.

This patch then makes setGVProperties able to handle null Decls.


https://reviews.llvm.org/D44233

Files:
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  test/CodeGenCXX/windows-itanium-exceptions.cpp


Index: test/CodeGenCXX/windows-itanium-exceptions.cpp
===
--- test/CodeGenCXX/windows-itanium-exceptions.cpp
+++ test/CodeGenCXX/windows-itanium-exceptions.cpp
@@ -10,7 +10,7 @@
   try { except(); } catch (...) { }
 }
 
-// CHECK: @_ZTIi = external constant i8*
+// CHECK: @_ZTIi = external dso_local constant i8*
 
 // CHECK: define {{.*}}void @_Z6exceptv() {{.*}} {
 // CHECK:   %exception = call {{.*}}i8* @__cxa_allocate_exception(i32 4)
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2615,10 +2615,10 @@
   /*Constant=*/true,
   llvm::GlobalValue::ExternalLinkage, nullptr,
   Name);
-if (const RecordType *RecordTy = dyn_cast(Ty)) {
-  const CXXRecordDecl *RD = cast(RecordTy->getDecl());
-  CGM.setGVProperties(GV, RD);
-}
+const CXXRecordDecl *RD = nullptr;
+if (const auto *RecordTy = dyn_cast(Ty))
+  RD = cast(RecordTy->getDecl());
+CGM.setGVProperties(GV, RD);
   }
 
   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -707,7 +707,8 @@
 GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
 return;
   }
-
+  if (!D)
+return;
   // Set visibility for definitions.
   LinkageInfo LV = D->getLinkageAndVisibility();
   if (LV.isVisibilityExplicit() || !GV->isDeclarationForLinker())
@@ -797,7 +798,7 @@
 
 void CodeGenModule::setDLLImportDLLExport(llvm::GlobalValue *GV,
   const NamedDecl *D) const {
-  if (D->isExternallyVisible()) {
+  if (D && D->isExternallyVisible()) {
 if (D->hasAttr())
   GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
 else if (D->hasAttr() && !GV->isDeclarationForLinker())


Index: test/CodeGenCXX/windows-itanium-exceptions.cpp
===
--- test/CodeGenCXX/windows-itanium-exceptions.cpp
+++ test/CodeGenCXX/windows-itanium-exceptions.cpp
@@ -10,7 +10,7 @@
   try { except(); } catch (...) { }
 }
 
-// CHECK: @_ZTIi = external constant i8*
+// CHECK: @_ZTIi = external dso_local constant i8*
 
 // CHECK: define {{.*}}void @_Z6exceptv() {{.*}} {
 // CHECK:   %exception = call {{.*}}i8* @__cxa_allocate_exception(i32 4)
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2615,10 +2615,10 @@
   /*Constant=*/true,
   llvm::GlobalValue::ExternalLinkage, nullptr,
   Name);
-if (const RecordType *RecordTy = dyn_cast(Ty)) {
-  const CXXRecordDecl *RD = cast(RecordTy->getDecl());
-  CGM.setGVProperties(GV, RD);
-}
+const CXXRecordDecl *RD = nullptr;
+if (const auto *RecordTy = dyn_cast(Ty))
+  RD = cast(RecordTy->getDecl());
+CGM.setGVProperties(GV, RD);
   }
 
   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -707,7 +707,8 @@
 GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
 return;
   }
-
+  if (!D)
+return;
   // Set visibility for definitions.
   LinkageInfo LV = D->getLinkageAndVisibility();
   if (LV.isVisibilityExplicit() || !GV->isDeclarationForLinker())
@@ -797,7 +798,7 @@
 
 void CodeGenModule::setDLLImportDLLExport(llvm::GlobalValue *GV,
   const NamedDecl *D) const {
-  if (D->isExternallyVisible()) {
+  if (D && D->isExternallyVisible()) {
 if (D->hasAttr())
   GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
 else if (D->hasAttr() && !GV->isDeclarationForLinker())
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43990: set dso_local on tls init functions

2018-03-07 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r326961


https://reviews.llvm.org/D43990



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43990: set dso_local on tls init functions

2018-03-07 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

Richard, you added the setVisibility line, are you OK with the change?


https://reviews.llvm.org/D43990



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43990: set dso_local on tls init functions

2018-03-01 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added a reviewer: echristo.

We copy the visibility, so copying the dso_local flag seems the natural thing 
to do.


https://reviews.llvm.org/D43990

Files:
  lib/CodeGen/ItaniumCXXABI.cpp
  test/CodeGenCXX/runtime-dllstorage.cpp


Index: test/CodeGenCXX/runtime-dllstorage.cpp
===
--- test/CodeGenCXX/runtime-dllstorage.cpp
+++ test/CodeGenCXX/runtime-dllstorage.cpp
@@ -114,6 +114,7 @@
 // CHECK-MS-DAG: declare void @_Init_thread_header(i32*)
 // CHECK-MS-DAG: declare void @_Init_thread_footer(i32*)
 
+// CHECK-IA-DAG: @_ZTH1t = dso_local alias void (), void ()* @__tls_init
 // CHECK-IA-DAG: declare i32 @__gxx_personality_v0(...)
 // CHECK-IA-DAG: define linkonce_odr hidden void @__clang_call_terminate(i8*)
 
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2399,8 +2399,10 @@
   CGM.SetLLVMFunctionAttributes(nullptr, FI, cast(Init));
 }
 
-if (Init)
+if (Init) {
   Init->setVisibility(Var->getVisibility());
+  Init->setDSOLocal(Var->isDSOLocal());
+}
 
 llvm::LLVMContext  = CGM.getModule().getContext();
 llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);


Index: test/CodeGenCXX/runtime-dllstorage.cpp
===
--- test/CodeGenCXX/runtime-dllstorage.cpp
+++ test/CodeGenCXX/runtime-dllstorage.cpp
@@ -114,6 +114,7 @@
 // CHECK-MS-DAG: declare void @_Init_thread_header(i32*)
 // CHECK-MS-DAG: declare void @_Init_thread_footer(i32*)
 
+// CHECK-IA-DAG: @_ZTH1t = dso_local alias void (), void ()* @__tls_init
 // CHECK-IA-DAG: declare i32 @__gxx_personality_v0(...)
 // CHECK-IA-DAG: define linkonce_odr hidden void @__clang_call_terminate(i8*)
 
Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -2399,8 +2399,10 @@
   CGM.SetLLVMFunctionAttributes(nullptr, FI, cast(Init));
 }
 
-if (Init)
+if (Init) {
   Init->setVisibility(Var->getVisibility());
+  Init->setDSOLocal(Var->isDSOLocal());
+}
 
 llvm::LLVMContext  = CGM.getModule().getContext();
 llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43851: Start setting dllimport/dllexport in setGVProperties

2018-02-28 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r326397


https://reviews.llvm.org/D43851



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43851: Start setting dllimport/dllexport in setGVProperties

2018-02-28 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

getting phab to send an email to cfe-commits


https://reviews.llvm.org/D43851



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43514: Start settinng dso_local for COFF

2018-02-23 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

325915


https://reviews.llvm.org/D43514



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43362: Simplify setting dso_local. NFC.

2018-02-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r325846


https://reviews.llvm.org/D43362



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D43514: Start settinng dso_local for COFF

2018-02-22 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola updated this revision to Diff 135547.
espindola added a comment.

Address review comments.


https://reviews.llvm.org/D43514

Files:
  lib/CodeGen/CGDecl.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/CodeGenModule.h
  lib/CodeGen/ItaniumCXXABI.cpp
  test/CodeGen/aarch64-varargs-ms.c
  test/CodeGen/attr-x86-interrupt.c
  test/CodeGen/blocks-windows.c
  test/CodeGen/builtins-ms.c
  test/CodeGen/builtins-overflow.c
  test/CodeGen/c-strings.c
  test/CodeGen/cfi-icall-cross-dso.c
  test/CodeGen/cfi-icall.c
  test/CodeGen/cfstring-windows.c
  test/CodeGen/dllexport.c
  test/CodeGen/dllimport.c
  test/CodeGen/dso-local-executable.c
  test/CodeGen/exceptions-seh-finally.c
  test/CodeGen/exceptions-seh-leave.c
  test/CodeGen/exceptions-seh.c
  test/CodeGen/inline.c
  test/CodeGen/mangle-ms.c
  test/CodeGen/mangle-windows-rtd.c
  test/CodeGen/mangle-windows.c
  test/CodeGen/microsoft-call-conv-x64.c
  test/CodeGen/mingw-long-double.c
  test/CodeGen/ms-align-tentative.c
  test/CodeGen/ms-annotation.c
  test/CodeGen/ms-barriers-intrinsics.c
  test/CodeGen/ms-declspecs.c
  test/CodeGen/ms-declspecs.cpp
  test/CodeGen/ms-inline-asm-align.c
  test/CodeGen/ms-inline-asm-avx512.c
  test/CodeGen/ms-intrinsics.c
  test/CodeGen/ms-setjmp.c
  test/CodeGen/ms-x86-intrinsics.c
  test/CodeGen/ms_abi.c
  test/CodeGen/ms_abi_aarch64.c
  test/CodeGen/ms_this.cpp
  test/CodeGen/preserve-call-conv.c
  test/CodeGen/regcall.c
  test/CodeGen/variadic-null-win64.c
  test/CodeGen/vectorcall.c
  test/CodeGen/windows-itanium.c
  test/CodeGen/windows-on-arm-dllimport-dllexport.c
  test/CodeGen/windows-struct-abi.c
  test/CodeGen/windows-swiftcall.c
  test/CodeGen/x86_32-arguments-win32.c
  test/CodeGen/x86_32-fpcc-struct-return.c
  test/CodeGen/x86_64-arguments-win32.c
  test/CodeGenCXX/PR19955.cpp
  test/CodeGenCXX/atomic-dllexport.cpp
  test/CodeGenCXX/attr-x86-interrupt.cpp
  test/CodeGenCXX/constructor-destructor-return-this.cpp
  test/CodeGenCXX/dllexport-alias.cpp
  test/CodeGenCXX/dllexport-ctor-closure.cpp
  test/CodeGenCXX/dllexport-dtor-thunks.cpp
  test/CodeGenCXX/dllexport-members.cpp
  test/CodeGenCXX/dllexport-ms-friend.cpp
  test/CodeGenCXX/dllexport-pr26549.cpp
  test/CodeGenCXX/dllexport-vtable-thunks.cpp
  test/CodeGenCXX/dllexport.cpp
  test/CodeGenCXX/dllimport-dtor-thunks.cpp
  test/CodeGenCXX/dllimport-members.cpp
  test/CodeGenCXX/dllimport-memptr-global.cpp
  test/CodeGenCXX/dllimport-rtti.cpp
  test/CodeGenCXX/dllimport.cpp
  test/CodeGenCXX/exceptions-cxx-ehsc.cpp
  test/CodeGenCXX/exceptions-cxx-new.cpp
  test/CodeGenCXX/exceptions-seh-filter-captures.cpp
  test/CodeGenCXX/exceptions-seh.cpp
  test/CodeGenCXX/explicit-instantiation.cpp
  test/CodeGenCXX/homogeneous-aggregates.cpp
  test/CodeGenCXX/initializer-list-ctor-order.cpp
  test/CodeGenCXX/inline-dllexport-member.cpp
  test/CodeGenCXX/inline-functions.cpp
  test/CodeGenCXX/mangle-ms-cxx11.cpp
  test/CodeGenCXX/mangle-ms-md5.cpp
  test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp
  test/CodeGenCXX/mangle-ms-vector-types.cpp
  test/CodeGenCXX/mangle-ms.cpp
  test/CodeGenCXX/mangle-windows.cpp
  test/CodeGenCXX/member-function-pointer-calls.cpp
  test/CodeGenCXX/microsoft-abi-arg-order.cpp
  test/CodeGenCXX/microsoft-abi-array-cookies.cpp
  test/CodeGenCXX/microsoft-abi-byval-sret.cpp
  test/CodeGenCXX/microsoft-abi-byval-thunks.cpp
  test/CodeGenCXX/microsoft-abi-byval-vararg.cpp
  test/CodeGenCXX/microsoft-abi-cdecl-method-sret.cpp
  test/CodeGenCXX/microsoft-abi-constexpr-vs-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-default-cc.cpp
  test/CodeGenCXX/microsoft-abi-dynamic-cast.cpp
  test/CodeGenCXX/microsoft-abi-eh-catch.cpp
  test/CodeGenCXX/microsoft-abi-eh-cleanups.cpp
  test/CodeGenCXX/microsoft-abi-eh-inlineasm.cpp
  test/CodeGenCXX/microsoft-abi-eh-terminate.cpp
  test/CodeGenCXX/microsoft-abi-extern-template.cpp
  test/CodeGenCXX/microsoft-abi-member-pointers.cpp
  test/CodeGenCXX/microsoft-abi-methods.cpp
  test/CodeGenCXX/microsoft-abi-multiple-nonvirtual-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp
  test/CodeGenCXX/microsoft-abi-static-initializers.cpp
  test/CodeGenCXX/microsoft-abi-structors-alias.cpp
  test/CodeGenCXX/microsoft-abi-structors.cpp
  test/CodeGenCXX/microsoft-abi-thread-safe-statics.cpp
  test/CodeGenCXX/microsoft-abi-thunks.cpp
  test/CodeGenCXX/microsoft-abi-try-throw.cpp
  test/CodeGenCXX/microsoft-abi-typeid.cpp
  test/CodeGenCXX/microsoft-abi-virtual-inheritance-vtordisps.cpp
  test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp
  test/CodeGenCXX/microsoft-abi-vmemptr-conflicts.cpp
  test/CodeGenCXX/microsoft-abi-vmemptr-vbase.cpp
  
test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance-this-adjustment.cpp
  test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp
  test/CodeGenCXX/microsoft-compatibility.cpp
  test/CodeGenCXX/microsoft-inaccessible-base.cpp
  test/CodeGenCXX/microsoft-interface.cpp
  

[PATCH] D43514: Start settinng dso_local for COFF

2018-02-20 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added a reviewer: rnk.
Herald added subscribers: eraman, javed.absar.

With this there are still some GVs where we don't set dso_local because 
setGVProperties is never called. I intend to fix that in followup commits. This 
is just the bare minimum to teach shouldAssumeDSOLocal what it should do for 
COFF.


https://reviews.llvm.org/D43514

Files:
  lib/CodeGen/CGDecl.cpp
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  test/CodeGen/aarch64-varargs-ms.c
  test/CodeGen/attr-x86-interrupt.c
  test/CodeGen/blocks-windows.c
  test/CodeGen/builtins-ms.c
  test/CodeGen/builtins-overflow.c
  test/CodeGen/c-strings.c
  test/CodeGen/cfi-icall-cross-dso.c
  test/CodeGen/cfi-icall.c
  test/CodeGen/cfstring-windows.c
  test/CodeGen/dllexport.c
  test/CodeGen/dllimport.c
  test/CodeGen/dso-local-executable.c
  test/CodeGen/exceptions-seh-finally.c
  test/CodeGen/exceptions-seh-leave.c
  test/CodeGen/exceptions-seh.c
  test/CodeGen/inline.c
  test/CodeGen/mangle-ms.c
  test/CodeGen/mangle-windows-rtd.c
  test/CodeGen/mangle-windows.c
  test/CodeGen/microsoft-call-conv-x64.c
  test/CodeGen/mingw-long-double.c
  test/CodeGen/ms-align-tentative.c
  test/CodeGen/ms-annotation.c
  test/CodeGen/ms-barriers-intrinsics.c
  test/CodeGen/ms-declspecs.c
  test/CodeGen/ms-declspecs.cpp
  test/CodeGen/ms-inline-asm-align.c
  test/CodeGen/ms-inline-asm-avx512.c
  test/CodeGen/ms-intrinsics.c
  test/CodeGen/ms-setjmp.c
  test/CodeGen/ms-x86-intrinsics.c
  test/CodeGen/ms_abi.c
  test/CodeGen/ms_abi_aarch64.c
  test/CodeGen/ms_this.cpp
  test/CodeGen/preserve-call-conv.c
  test/CodeGen/regcall.c
  test/CodeGen/variadic-null-win64.c
  test/CodeGen/vectorcall.c
  test/CodeGen/windows-itanium.c
  test/CodeGen/windows-on-arm-dllimport-dllexport.c
  test/CodeGen/windows-struct-abi.c
  test/CodeGen/windows-swiftcall.c
  test/CodeGen/x86_32-arguments-win32.c
  test/CodeGen/x86_32-fpcc-struct-return.c
  test/CodeGen/x86_64-arguments-win32.c
  test/CodeGenCXX/PR19955.cpp
  test/CodeGenCXX/atomic-dllexport.cpp
  test/CodeGenCXX/attr-x86-interrupt.cpp
  test/CodeGenCXX/constructor-destructor-return-this.cpp
  test/CodeGenCXX/dllexport-alias.cpp
  test/CodeGenCXX/dllexport-ctor-closure.cpp
  test/CodeGenCXX/dllexport-dtor-thunks.cpp
  test/CodeGenCXX/dllexport-members.cpp
  test/CodeGenCXX/dllexport-ms-friend.cpp
  test/CodeGenCXX/dllexport-pr26549.cpp
  test/CodeGenCXX/dllexport-vtable-thunks.cpp
  test/CodeGenCXX/dllexport.cpp
  test/CodeGenCXX/dllimport-dtor-thunks.cpp
  test/CodeGenCXX/dllimport-members.cpp
  test/CodeGenCXX/dllimport-memptr-global.cpp
  test/CodeGenCXX/dllimport-rtti.cpp
  test/CodeGenCXX/dllimport.cpp
  test/CodeGenCXX/exceptions-cxx-ehsc.cpp
  test/CodeGenCXX/exceptions-cxx-new.cpp
  test/CodeGenCXX/exceptions-seh-filter-captures.cpp
  test/CodeGenCXX/exceptions-seh.cpp
  test/CodeGenCXX/explicit-instantiation.cpp
  test/CodeGenCXX/homogeneous-aggregates.cpp
  test/CodeGenCXX/initializer-list-ctor-order.cpp
  test/CodeGenCXX/inline-dllexport-member.cpp
  test/CodeGenCXX/inline-functions.cpp
  test/CodeGenCXX/mangle-ms-cxx11.cpp
  test/CodeGenCXX/mangle-ms-md5.cpp
  test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp
  test/CodeGenCXX/mangle-ms-vector-types.cpp
  test/CodeGenCXX/mangle-ms.cpp
  test/CodeGenCXX/mangle-windows.cpp
  test/CodeGenCXX/member-function-pointer-calls.cpp
  test/CodeGenCXX/microsoft-abi-arg-order.cpp
  test/CodeGenCXX/microsoft-abi-array-cookies.cpp
  test/CodeGenCXX/microsoft-abi-byval-sret.cpp
  test/CodeGenCXX/microsoft-abi-byval-thunks.cpp
  test/CodeGenCXX/microsoft-abi-byval-vararg.cpp
  test/CodeGenCXX/microsoft-abi-cdecl-method-sret.cpp
  test/CodeGenCXX/microsoft-abi-constexpr-vs-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-default-cc.cpp
  test/CodeGenCXX/microsoft-abi-dynamic-cast.cpp
  test/CodeGenCXX/microsoft-abi-eh-catch.cpp
  test/CodeGenCXX/microsoft-abi-eh-cleanups.cpp
  test/CodeGenCXX/microsoft-abi-eh-inlineasm.cpp
  test/CodeGenCXX/microsoft-abi-eh-terminate.cpp
  test/CodeGenCXX/microsoft-abi-extern-template.cpp
  test/CodeGenCXX/microsoft-abi-member-pointers.cpp
  test/CodeGenCXX/microsoft-abi-methods.cpp
  test/CodeGenCXX/microsoft-abi-multiple-nonvirtual-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp
  test/CodeGenCXX/microsoft-abi-static-initializers.cpp
  test/CodeGenCXX/microsoft-abi-structors-alias.cpp
  test/CodeGenCXX/microsoft-abi-structors.cpp
  test/CodeGenCXX/microsoft-abi-thread-safe-statics.cpp
  test/CodeGenCXX/microsoft-abi-thunks.cpp
  test/CodeGenCXX/microsoft-abi-try-throw.cpp
  test/CodeGenCXX/microsoft-abi-typeid.cpp
  test/CodeGenCXX/microsoft-abi-virtual-inheritance-vtordisps.cpp
  test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp
  test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp
  test/CodeGenCXX/microsoft-abi-vmemptr-conflicts.cpp
  test/CodeGenCXX/microsoft-abi-vmemptr-vbase.cpp
  

[PATCH] D43362: Simplify setting dso_local. NFC.

2018-02-15 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added a reviewer: rnk.

The value of dso_local can be computed from just IR properties and global 
information (object file type, command line options, etc).

With this patch we no longer pass in the Decl. It was almost unused and making 
it fully unused guarantees that dso_local is consistent with the rest of the IR.


https://reviews.llvm.org/D43362

Files:
  lib/CodeGen/CodeGenModule.cpp
  lib/CodeGen/CodeGenModule.h
  lib/CodeGen/ItaniumCXXABI.cpp


Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -3214,10 +3214,10 @@
 llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
 
   TypeName->setVisibility(llvmVisibility);
-  CGM.setDSOLocal(TypeName, Ty->getAsCXXRecordDecl());
+  CGM.setDSOLocal(TypeName);
 
   GV->setVisibility(llvmVisibility);
-  CGM.setDSOLocal(GV, Ty->getAsCXXRecordDecl());
+  CGM.setDSOLocal(GV);
 
   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
 auto RD = Ty->getAsCXXRecordDecl();
Index: lib/CodeGen/CodeGenModule.h
===
--- lib/CodeGen/CodeGenModule.h
+++ lib/CodeGen/CodeGenModule.h
@@ -721,7 +721,7 @@
   /// Set the visibility for the given LLVM GlobalValue.
   void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const;
 
-  void setDSOLocal(llvm::GlobalValue *GV, const NamedDecl *D) const;
+  void setDSOLocal(llvm::GlobalValue *GV) const;
 
   void setGVProperties(llvm::GlobalValue *GV, const NamedDecl *D) const;
 
Index: lib/CodeGen/CodeGenModule.cpp
===
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -716,7 +716,7 @@
 }
 
 static bool shouldAssumeDSOLocal(const CodeGenModule ,
- llvm::GlobalValue *GV, const NamedDecl *D) {
+ llvm::GlobalValue *GV) {
   const llvm::Triple  = CGM.getTriple();
   // Only handle ELF for now.
   if (!TT.isOSBinFormatELF())
@@ -746,31 +746,30 @@
 return false;
 
   // If we can use copy relocations we can assume it is local.
-  if (auto *VD = dyn_cast(D))
-if (VD->getTLSKind() == VarDecl::TLS_None &&
+  if (auto *Var = dyn_cast(GV))
+if (!Var->isThreadLocal() &&
 (RM == llvm::Reloc::Static || CGOpts.PIECopyRelocations))
   return true;
 
   // If we can use a plt entry as the symbol address we can assume it
   // is local.
   // FIXME: This should work for PIE, but the gold linker doesn't support it.
-  if (isa(D) && !CGOpts.NoPLT && RM == llvm::Reloc::Static)
+  if (isa(GV) && !CGOpts.NoPLT && RM == llvm::Reloc::Static)
 return true;
 
   // Otherwise don't assue it is local.
   return false;
 }
 
-void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV,
-const NamedDecl *D) const {
-  if (shouldAssumeDSOLocal(*this, GV, D))
+void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV) const {
+  if (shouldAssumeDSOLocal(*this, GV))
 GV->setDSOLocal(true);
 }
 
 void CodeGenModule::setGVProperties(llvm::GlobalValue *GV,
 const NamedDecl *D) const {
   setGlobalVisibility(GV, D);
-  setDSOLocal(GV, D);
+  setDSOLocal(GV);
 }
 
 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
@@ -2753,14 +2752,15 @@
 GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
 
 setLinkageForGV(GV, D);
-setGVProperties(GV, D);
 
 if (D->getTLSKind()) {
   if (D->getTLSKind() == VarDecl::TLS_Dynamic)
 CXXThreadLocals.push_back(D);
   setTLSMode(GV, *D);
 }
 
+setGVProperties(GV, D);
+
 // If required by the ABI, treat declarations of static data members with
 // inline initializers as definitions.
 if (getContext().isMSStaticDataMemberInlineDefinition(D)) {


Index: lib/CodeGen/ItaniumCXXABI.cpp
===
--- lib/CodeGen/ItaniumCXXABI.cpp
+++ lib/CodeGen/ItaniumCXXABI.cpp
@@ -3214,10 +3214,10 @@
 llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
 
   TypeName->setVisibility(llvmVisibility);
-  CGM.setDSOLocal(TypeName, Ty->getAsCXXRecordDecl());
+  CGM.setDSOLocal(TypeName);
 
   GV->setVisibility(llvmVisibility);
-  CGM.setDSOLocal(GV, Ty->getAsCXXRecordDecl());
+  CGM.setDSOLocal(GV);
 
   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
 auto RD = Ty->getAsCXXRecordDecl();
Index: lib/CodeGen/CodeGenModule.h
===
--- lib/CodeGen/CodeGenModule.h
+++ lib/CodeGen/CodeGenModule.h
@@ -721,7 +721,7 @@
   /// Set the visibility for the given LLVM GlobalValue.
   void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const;
 
-  void setDSOLocal(llvm::GlobalValue *GV, const NamedDecl *D) const;
+  void 

[PATCH] D42924: Don't pass ForDefinition_t in places it is redundant.

2018-02-07 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r324499


https://reviews.llvm.org/D42924



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D42924: Don't pass ForDefinition_t in places it is redundant.

2018-02-07 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

Ping.


https://reviews.llvm.org/D42924



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D42924: Don't pass ForDefinition_t in places it is redundant.

2018-02-05 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: sfertile, rnk.

I found this while looking at the ppc failures caused by the  dso_local change.

The issue was that the patch would produce the wrong answer for 
available_externally. Having ForDefinition_t available in places where the code 
can just check the linkage is a bit of a foot gun.

This patch removes the ForDefiniton_t argument in places where the linkage is 
already know.


https://reviews.llvm.org/D42924

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGVTT.cpp
  clang/lib/CodeGen/CGVTables.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/CodeGen/TargetInfo.h

Index: clang/lib/CodeGen/TargetInfo.h
===
--- clang/lib/CodeGen/TargetInfo.h
+++ clang/lib/CodeGen/TargetInfo.h
@@ -57,8 +57,7 @@
   /// setTargetAttributes - Provides a convenient hook to handle extra
   /// target-specific attributes for the given global.
   virtual void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
-   CodeGen::CodeGenModule ,
-   ForDefinition_t IsForDefinition) const {}
+   CodeGen::CodeGenModule ) const {}
 
   /// emitTargetMD - Provides a convenient hook to handle extra
   /// target-specific metadata for the given global.
Index: clang/lib/CodeGen/TargetInfo.cpp
===
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -1052,8 +1052,7 @@
   const llvm::Triple , const CodeGenOptions );
 
   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
-   CodeGen::CodeGenModule ,
-   ForDefinition_t IsForDefinition) const override;
+   CodeGen::CodeGenModule ) const override;
 
   int getDwarfEHStackPointer(CodeGen::CodeGenModule ) const override {
 // Darwin uses different dwarf register numbers for EH.
@@ -1920,9 +1919,8 @@
 }
 
 void X86_32TargetCodeGenInfo::setTargetAttributes(
-const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ,
-ForDefinition_t IsForDefinition) const {
-  if (!IsForDefinition)
+const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ) const {
+  if (GV->isDeclaration())
 return;
   if (const FunctionDecl *FD = dyn_cast_or_null(D)) {
 if (FD->hasAttr()) {
@@ -2279,9 +2277,8 @@
   }
 
   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
-   CodeGen::CodeGenModule ,
-   ForDefinition_t IsForDefinition) const override {
-if (!IsForDefinition)
+   CodeGen::CodeGenModule ) const override {
+if (GV->isDeclaration())
   return;
 if (const FunctionDecl *FD = dyn_cast_or_null(D)) {
   if (FD->hasAttr()) {
@@ -2339,8 +2336,7 @@
 Win32StructABI, NumRegisterParameters, false) {}
 
   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
-   CodeGen::CodeGenModule ,
-   ForDefinition_t IsForDefinition) const override;
+   CodeGen::CodeGenModule ) const override;
 
   void getDependentLibraryOption(llvm::StringRef Lib,
  llvm::SmallString<24> ) const override {
@@ -2369,10 +2365,9 @@
 }
 
 void WinX86_32TargetCodeGenInfo::setTargetAttributes(
-const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ,
-ForDefinition_t IsForDefinition) const {
-  X86_32TargetCodeGenInfo::setTargetAttributes(D, GV, CGM, IsForDefinition);
-  if (!IsForDefinition)
+const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ) const {
+  X86_32TargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
+  if (GV->isDeclaration())
 return;
   addStackProbeSizeTargetAttribute(D, GV, CGM);
 }
@@ -2384,8 +2379,7 @@
   : TargetCodeGenInfo(new WinX86_64ABIInfo(CGT)) {}
 
   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
-   CodeGen::CodeGenModule ,
-   ForDefinition_t IsForDefinition) const override;
+   CodeGen::CodeGenModule ) const override;
 
   int getDwarfEHStackPointer(CodeGen::CodeGenModule ) const override {
 return 7;
@@ -2415,10 +2409,9 @@
 };
 
 void WinX86_64TargetCodeGenInfo::setTargetAttributes(
-const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ,
-ForDefinition_t IsForDefinition) const {
-  TargetCodeGenInfo::setTargetAttributes(D, GV, CGM, IsForDefinition);
-  if (!IsForDefinition)
+const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule ) const {
+  TargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
+  if (GV->isDeclaration())
 return;
   if (const FunctionDecl *FD = dyn_cast_or_null(D)) {
 if 

[PATCH] D41318: Start setting dso_local in clang

2018-02-02 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

r324107


https://reviews.llvm.org/D41318



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41318: Start setting dso_local in clang

2018-01-31 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola updated this revision to Diff 132282.
espindola added a comment.

Handle ppc.


https://reviews.llvm.org/D41318

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGVTT.cpp
  clang/lib/CodeGen/CGVTables.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/test/CodeGen/dso-local-executable.c
  clang/test/CodeGen/mbackchain-2.c
  clang/test/CodeGen/mbackchain-3.c
  clang/test/CodeGen/mips-vector-return.c
  clang/test/CodeGen/split-stacks.c
  clang/test/CodeGenCXX/debug-info-static-member.cpp
  clang/test/CodeGenCXX/debug-info-template.cpp
  clang/test/CodeGenCXX/dso-local-executable.cpp
  clang/test/CodeGenCXX/float16-declarations.cpp
  clang/test/CodeGenCXX/split-stacks.cpp
  clang/test/Driver/lanai-unknown-unknown.cpp
  clang/test/Driver/le32-unknown-nacl.cpp
  clang/test/Driver/le64-unknown-unknown.cpp
  clang/test/Driver/riscv32-toolchain.c
  clang/test/Driver/riscv64-toolchain.c
  clang/test/Frontend/ast-codegen.c

Index: clang/test/Frontend/ast-codegen.c
===
--- clang/test/Frontend/ast-codegen.c
+++ clang/test/Frontend/ast-codegen.c
@@ -5,9 +5,9 @@
 // CHECK: module asm "foo"
 __asm__("foo");
 
-// CHECK: @g0 = common global i32 0, align 4
+// CHECK: @g0 = common dso_local global i32 0, align 4
 int g0;
 
-// CHECK: define i32 @f0()
+// CHECK: define dso_local i32 @f0()
 int f0() {
 }
Index: clang/test/Driver/riscv64-toolchain.c
===
--- clang/test/Driver/riscv64-toolchain.c
+++ clang/test/Driver/riscv64-toolchain.c
@@ -10,82 +10,82 @@
 typedef __PTRDIFF_TYPE__ ptrdiff_t;
 typedef __WCHAR_TYPE__ wchar_t;
 
-// CHECK: @align_c = global i32 1
+// CHECK: @align_c = dso_local global i32 1
 int align_c = __alignof(char);
 
-// CHECK: @align_s = global i32 2
+// CHECK: @align_s = dso_local global i32 2
 int align_s = __alignof(short);
 
-// CHECK: @align_i = global i32 4
+// CHECK: @align_i = dso_local global i32 4
 int align_i = __alignof(int);
 
-// CHECK: @align_wc = global i32 4
+// CHECK: @align_wc = dso_local global i32 4
 int align_wc = __alignof(wchar_t);
 
-// CHECK: @align_l = global i32 8
+// CHECK: @align_l = dso_local global i32 8
 int align_l = __alignof(long);
 
-// CHECK: @align_ll = global i32 8
+// CHECK: @align_ll = dso_local global i32 8
 int align_ll = __alignof(long long);
 
-// CHECK: @align_p = global i32 8
+// CHECK: @align_p = dso_local global i32 8
 int align_p = __alignof(void*);
 
-// CHECK: @align_f = global i32 4
+// CHECK: @align_f = dso_local global i32 4
 int align_f = __alignof(float);
 
-// CHECK: @align_d = global i32 8
+// CHECK: @align_d = dso_local global i32 8
 int align_d = __alignof(double);
 
-// CHECK: @align_ld = global i32 16
+// CHECK: @align_ld = dso_local global i32 16
 int align_ld = __alignof(long double);
 
-// CHECK: @align_vl = global i32 8
+// CHECK: @align_vl = dso_local global i32 8
 int align_vl = __alignof(va_list);
 
 // Check types
 
-// CHECK: define zeroext i8 @check_char()
+// CHECK: define dso_local zeroext i8 @check_char()
 char check_char() { return 0; }
 
-// CHECK: define signext i16 @check_short()
+// CHECK: define dso_local signext i16 @check_short()
 short check_short() { return 0; }
 
-// CHECK: define signext i32 @check_int()
+// CHECK: define dso_local signext i32 @check_int()
 int check_int() { return 0; }
 
-// CHECK: define signext i32 @check_wchar_t()
+// CHECK: define dso_local signext i32 @check_wchar_t()
 int check_wchar_t() { return 0; }
 
-// CHECK: define i64 @check_long()
+// CHECK: define dso_local i64 @check_long()
 long check_long() { return 0; }
 
-// CHECK: define i64 @check_longlong()
+// CHECK: define dso_local i64 @check_longlong()
 long long check_longlong() { return 0; }
 
-// CHECK: define zeroext i8 @check_uchar()
+// CHECK: define dso_local zeroext i8 @check_uchar()
 unsigned char check_uchar() { return 0; }
 
-// CHECK: define zeroext i16 @check_ushort()
+// CHECK: define dso_local zeroext i16 @check_ushort()
 unsigned short check_ushort() { return 0; }
 
-// CHECK: define signext i32 @check_uint()
+// CHECK: define dso_local signext i32 @check_uint()
 unsigned int check_uint() { return 0; }
 
-// CHECK: define i64 @check_ulong()
+// CHECK: define dso_local i64 @check_ulong()
 unsigned long check_ulong() { return 0; }
 
-// CHECK: define i64 @check_ulonglong()
+// CHECK: define dso_local i64 @check_ulonglong()
 unsigned long long check_ulonglong() { return 0; }
 
-// CHECK: define i64 @check_size_t()
+// CHECK: define dso_local i64 @check_size_t()
 size_t check_size_t() { return 0; }
 
-// CHECK: define float @check_float()
+// CHECK: define dso_local float @check_float()
 float check_float() { return 0; }
 
-// CHECK: define double @check_double()
+// CHECK: define dso_local double @check_double()
 double check_double() { return 0; }
 
-// CHECK: define fp128 @check_longdouble()
+// CHECK: 

[PATCH] D41318: Start setting dso_local in clang

2018-01-29 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola updated this revision to Diff 131878.
espindola added a comment.

Rebased. Ping


https://reviews.llvm.org/D41318

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGVTT.cpp
  clang/lib/CodeGen/CGVTables.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/test/CodeGen/dso-local-executable.c
  clang/test/CodeGen/mbackchain-2.c
  clang/test/CodeGen/mbackchain-3.c
  clang/test/CodeGen/mips-vector-return.c
  clang/test/CodeGen/split-stacks.c
  clang/test/CodeGenCXX/debug-info-static-member.cpp
  clang/test/CodeGenCXX/debug-info-template.cpp
  clang/test/CodeGenCXX/dso-local-executable.cpp
  clang/test/CodeGenCXX/float16-declarations.cpp
  clang/test/CodeGenCXX/split-stacks.cpp
  clang/test/Driver/lanai-unknown-unknown.cpp
  clang/test/Driver/le32-unknown-nacl.cpp
  clang/test/Driver/le64-unknown-unknown.cpp
  clang/test/Driver/riscv32-toolchain.c
  clang/test/Driver/riscv64-toolchain.c
  clang/test/Frontend/ast-codegen.c

Index: clang/test/Frontend/ast-codegen.c
===
--- clang/test/Frontend/ast-codegen.c
+++ clang/test/Frontend/ast-codegen.c
@@ -5,9 +5,9 @@
 // CHECK: module asm "foo"
 __asm__("foo");
 
-// CHECK: @g0 = common global i32 0, align 4
+// CHECK: @g0 = common dso_local global i32 0, align 4
 int g0;
 
-// CHECK: define i32 @f0()
+// CHECK: define dso_local i32 @f0()
 int f0() {
 }
Index: clang/test/Driver/riscv64-toolchain.c
===
--- clang/test/Driver/riscv64-toolchain.c
+++ clang/test/Driver/riscv64-toolchain.c
@@ -10,82 +10,82 @@
 typedef __PTRDIFF_TYPE__ ptrdiff_t;
 typedef __WCHAR_TYPE__ wchar_t;
 
-// CHECK: @align_c = global i32 1
+// CHECK: @align_c = dso_local global i32 1
 int align_c = __alignof(char);
 
-// CHECK: @align_s = global i32 2
+// CHECK: @align_s = dso_local global i32 2
 int align_s = __alignof(short);
 
-// CHECK: @align_i = global i32 4
+// CHECK: @align_i = dso_local global i32 4
 int align_i = __alignof(int);
 
-// CHECK: @align_wc = global i32 4
+// CHECK: @align_wc = dso_local global i32 4
 int align_wc = __alignof(wchar_t);
 
-// CHECK: @align_l = global i32 8
+// CHECK: @align_l = dso_local global i32 8
 int align_l = __alignof(long);
 
-// CHECK: @align_ll = global i32 8
+// CHECK: @align_ll = dso_local global i32 8
 int align_ll = __alignof(long long);
 
-// CHECK: @align_p = global i32 8
+// CHECK: @align_p = dso_local global i32 8
 int align_p = __alignof(void*);
 
-// CHECK: @align_f = global i32 4
+// CHECK: @align_f = dso_local global i32 4
 int align_f = __alignof(float);
 
-// CHECK: @align_d = global i32 8
+// CHECK: @align_d = dso_local global i32 8
 int align_d = __alignof(double);
 
-// CHECK: @align_ld = global i32 16
+// CHECK: @align_ld = dso_local global i32 16
 int align_ld = __alignof(long double);
 
-// CHECK: @align_vl = global i32 8
+// CHECK: @align_vl = dso_local global i32 8
 int align_vl = __alignof(va_list);
 
 // Check types
 
-// CHECK: define zeroext i8 @check_char()
+// CHECK: define dso_local zeroext i8 @check_char()
 char check_char() { return 0; }
 
-// CHECK: define signext i16 @check_short()
+// CHECK: define dso_local signext i16 @check_short()
 short check_short() { return 0; }
 
-// CHECK: define signext i32 @check_int()
+// CHECK: define dso_local signext i32 @check_int()
 int check_int() { return 0; }
 
-// CHECK: define signext i32 @check_wchar_t()
+// CHECK: define dso_local signext i32 @check_wchar_t()
 int check_wchar_t() { return 0; }
 
-// CHECK: define i64 @check_long()
+// CHECK: define dso_local i64 @check_long()
 long check_long() { return 0; }
 
-// CHECK: define i64 @check_longlong()
+// CHECK: define dso_local i64 @check_longlong()
 long long check_longlong() { return 0; }
 
-// CHECK: define zeroext i8 @check_uchar()
+// CHECK: define dso_local zeroext i8 @check_uchar()
 unsigned char check_uchar() { return 0; }
 
-// CHECK: define zeroext i16 @check_ushort()
+// CHECK: define dso_local zeroext i16 @check_ushort()
 unsigned short check_ushort() { return 0; }
 
-// CHECK: define signext i32 @check_uint()
+// CHECK: define dso_local signext i32 @check_uint()
 unsigned int check_uint() { return 0; }
 
-// CHECK: define i64 @check_ulong()
+// CHECK: define dso_local i64 @check_ulong()
 unsigned long check_ulong() { return 0; }
 
-// CHECK: define i64 @check_ulonglong()
+// CHECK: define dso_local i64 @check_ulonglong()
 unsigned long long check_ulonglong() { return 0; }
 
-// CHECK: define i64 @check_size_t()
+// CHECK: define dso_local i64 @check_size_t()
 size_t check_size_t() { return 0; }
 
-// CHECK: define float @check_float()
+// CHECK: define dso_local float @check_float()
 float check_float() { return 0; }
 
-// CHECK: define double @check_double()
+// CHECK: define dso_local double @check_double()
 double check_double() { return 0; }
 
-// CHECK: define fp128 @check_longdouble()
+// CHECK: 

[PATCH] D42455: Don't create hidden dllimport global values

2018-01-24 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola closed this revision.
espindola added a comment.

323361


https://reviews.llvm.org/D42455



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41318: Start setting dso_local in clang

2018-01-17 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola updated this revision to Diff 130351.
espindola added a comment.
Herald added subscribers: niosHD, sabuasal, apazos, jordy.potman.lists, 
simoncook, johnrusso, rbar, asb.

All tests have been updated.

A few missing cases in c++ codegen are handled.
We now use CodeGenOpts.RelocationModel, which is the same value that llvm uses. 
This also has the advantage that clang_cc1 default to pic, so there is a lot 
less tests to update.

Sorry for the noise, but sending for review again since there is more code.


https://reviews.llvm.org/D41318

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGVTT.cpp
  clang/lib/CodeGen/CGVTables.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/test/CodeGen/dso-local-executable.c
  clang/test/CodeGen/dso-local-executable.cpp
  clang/test/CodeGen/mbackchain-2.c
  clang/test/CodeGen/mbackchain-3.c
  clang/test/CodeGen/mips-vector-return.c
  clang/test/CodeGen/split-stacks.c
  clang/test/CodeGenCXX/debug-info-static-member.cpp
  clang/test/CodeGenCXX/debug-info-template.cpp
  clang/test/CodeGenCXX/float16-declarations.cpp
  clang/test/CodeGenCXX/split-stacks.cpp
  clang/test/Driver/lanai-unknown-unknown.cpp
  clang/test/Driver/le32-unknown-nacl.cpp
  clang/test/Driver/le64-unknown-unknown.cpp
  clang/test/Driver/riscv32-toolchain.c
  clang/test/Driver/riscv64-toolchain.c
  clang/test/Frontend/ast-codegen.c

Index: clang/test/Frontend/ast-codegen.c
===
--- clang/test/Frontend/ast-codegen.c
+++ clang/test/Frontend/ast-codegen.c
@@ -5,9 +5,9 @@
 // CHECK: module asm "foo"
 __asm__("foo");
 
-// CHECK: @g0 = common global i32 0, align 4
+// CHECK: @g0 = common dso_local global i32 0, align 4
 int g0;
 
-// CHECK: define i32 @f0()
+// CHECK: define dso_local i32 @f0()
 int f0() {
 }
Index: clang/test/Driver/riscv64-toolchain.c
===
--- clang/test/Driver/riscv64-toolchain.c
+++ clang/test/Driver/riscv64-toolchain.c
@@ -10,82 +10,82 @@
 typedef __PTRDIFF_TYPE__ ptrdiff_t;
 typedef __WCHAR_TYPE__ wchar_t;
 
-// CHECK: @align_c = global i32 1
+// CHECK: @align_c = dso_local global i32 1
 int align_c = __alignof(char);
 
-// CHECK: @align_s = global i32 2
+// CHECK: @align_s = dso_local global i32 2
 int align_s = __alignof(short);
 
-// CHECK: @align_i = global i32 4
+// CHECK: @align_i = dso_local global i32 4
 int align_i = __alignof(int);
 
-// CHECK: @align_wc = global i32 4
+// CHECK: @align_wc = dso_local global i32 4
 int align_wc = __alignof(wchar_t);
 
-// CHECK: @align_l = global i32 8
+// CHECK: @align_l = dso_local global i32 8
 int align_l = __alignof(long);
 
-// CHECK: @align_ll = global i32 8
+// CHECK: @align_ll = dso_local global i32 8
 int align_ll = __alignof(long long);
 
-// CHECK: @align_p = global i32 8
+// CHECK: @align_p = dso_local global i32 8
 int align_p = __alignof(void*);
 
-// CHECK: @align_f = global i32 4
+// CHECK: @align_f = dso_local global i32 4
 int align_f = __alignof(float);
 
-// CHECK: @align_d = global i32 8
+// CHECK: @align_d = dso_local global i32 8
 int align_d = __alignof(double);
 
-// CHECK: @align_ld = global i32 16
+// CHECK: @align_ld = dso_local global i32 16
 int align_ld = __alignof(long double);
 
-// CHECK: @align_vl = global i32 8
+// CHECK: @align_vl = dso_local global i32 8
 int align_vl = __alignof(va_list);
 
 // Check types
 
-// CHECK: define zeroext i8 @check_char()
+// CHECK: define dso_local zeroext i8 @check_char()
 char check_char() { return 0; }
 
-// CHECK: define signext i16 @check_short()
+// CHECK: define dso_local signext i16 @check_short()
 short check_short() { return 0; }
 
-// CHECK: define signext i32 @check_int()
+// CHECK: define dso_local signext i32 @check_int()
 int check_int() { return 0; }
 
-// CHECK: define signext i32 @check_wchar_t()
+// CHECK: define dso_local signext i32 @check_wchar_t()
 int check_wchar_t() { return 0; }
 
-// CHECK: define i64 @check_long()
+// CHECK: define dso_local i64 @check_long()
 long check_long() { return 0; }
 
-// CHECK: define i64 @check_longlong()
+// CHECK: define dso_local i64 @check_longlong()
 long long check_longlong() { return 0; }
 
-// CHECK: define zeroext i8 @check_uchar()
+// CHECK: define dso_local zeroext i8 @check_uchar()
 unsigned char check_uchar() { return 0; }
 
-// CHECK: define zeroext i16 @check_ushort()
+// CHECK: define dso_local zeroext i16 @check_ushort()
 unsigned short check_ushort() { return 0; }
 
-// CHECK: define signext i32 @check_uint()
+// CHECK: define dso_local signext i32 @check_uint()
 unsigned int check_uint() { return 0; }
 
-// CHECK: define i64 @check_ulong()
+// CHECK: define dso_local i64 @check_ulong()
 unsigned long check_ulong() { return 0; }
 
-// CHECK: define i64 @check_ulonglong()
+// CHECK: define dso_local i64 @check_ulonglong()
 unsigned long long check_ulonglong() { return 0; }
 
-// CHECK: 

[PATCH] D42208: Use an enum value instead of an string

2018-01-17 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola added a comment.

322792


https://reviews.llvm.org/D42208



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D42208: Use an enum value instea of an string

2018-01-17 Thread Rafael Avila de Espindola via Phabricator via cfe-commits
espindola created this revision.
espindola added reviewers: rnk, rsmith.

The old StringSwitch use was  also broken. It assumed that a StringSwitch 
returns Optional instead of T and was missing a .Default.


https://reviews.llvm.org/D42208

Files:
  clang/include/clang/Frontend/CodeGenOptions.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/Frontend/CodeGenOptions.cpp
  clang/lib/Frontend/CompilerInvocation.cpp

Index: clang/lib/Frontend/CompilerInvocation.cpp
===
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -330,15 +330,23 @@
   return "default";
 }
 
-static StringRef getRelocModel(ArgList , DiagnosticsEngine ) {
+static llvm::Reloc::Model getRelocModel(ArgList ,
+DiagnosticsEngine ) {
   if (Arg *A = Args.getLastArg(OPT_mrelocation_model)) {
 StringRef Value = A->getValue();
-if (Value == "static" || Value == "pic" || Value == "ropi" ||
-Value == "rwpi" || Value == "ropi-rwpi" || Value == "dynamic-no-pic")
-  return Value;
+auto RM = llvm::StringSwitch(Value)
+  .Case("static", llvm::Reloc::Static)
+  .Case("pic", llvm::Reloc::PIC_)
+  .Case("ropi", llvm::Reloc::ROPI)
+  .Case("rwpi", llvm::Reloc::RWPI)
+  .Case("ropi-rwpi", llvm::Reloc::ROPI_RWPI)
+  .Case("dynamic-no-pic", llvm::Reloc::DynamicNoPIC)
+  .Default(None);
+if (RM.hasValue())
+  return *RM;
 Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Value;
   }
-  return "pic";
+  return llvm::Reloc::PIC_;
 }
 
 /// \brief Create a new Regex instance out of the string value in \p RpassArg.
Index: clang/lib/Frontend/CodeGenOptions.cpp
===
--- clang/lib/Frontend/CodeGenOptions.cpp
+++ clang/lib/Frontend/CodeGenOptions.cpp
@@ -17,7 +17,7 @@
 #define ENUM_CODEGENOPT(Name, Type, Bits, Default) set##Name(Default);
 #include "clang/Frontend/CodeGenOptions.def"
 
-  RelocationModel = "pic";
+  RelocationModel = llvm::Reloc::PIC_;
   memcpy(CoverageVersion, "402*", 4);
 }
 
Index: clang/lib/CodeGen/BackendUtil.cpp
===
--- clang/lib/CodeGen/BackendUtil.cpp
+++ clang/lib/CodeGen/BackendUtil.cpp
@@ -362,21 +362,6 @@
   return static_cast(CodeModel);
 }
 
-static llvm::Reloc::Model getRelocModel(const CodeGenOptions ) {
-  // Keep this synced with the equivalent code in
-  // lib/Frontend/CompilerInvocation.cpp
-  llvm::Optional RM;
-  RM = llvm::StringSwitch(CodeGenOpts.RelocationModel)
-  .Case("static", llvm::Reloc::Static)
-  .Case("pic", llvm::Reloc::PIC_)
-  .Case("ropi", llvm::Reloc::ROPI)
-  .Case("rwpi", llvm::Reloc::RWPI)
-  .Case("ropi-rwpi", llvm::Reloc::ROPI_RWPI)
-  .Case("dynamic-no-pic", llvm::Reloc::DynamicNoPIC);
-  assert(RM.hasValue() && "invalid PIC model!");
-  return *RM;
-}
-
 static TargetMachine::CodeGenFileType getCodeGenFileType(BackendAction Action) {
   if (Action == Backend_EmitObj)
 return TargetMachine::CGFT_ObjectFile;
@@ -692,7 +677,7 @@
   Optional CM = getCodeModel(CodeGenOpts);
   std::string FeaturesStr =
   llvm::join(TargetOpts.Features.begin(), TargetOpts.Features.end(), ",");
-  llvm::Reloc::Model RM = getRelocModel(CodeGenOpts);
+  llvm::Reloc::Model RM = CodeGenOpts.RelocationModel;
   CodeGenOpt::Level OptLevel = getCGOptLevel(CodeGenOpts);
 
   llvm::TargetOptions Options;
@@ -1113,7 +1098,7 @@
   Conf.CPU = TOpts.CPU;
   Conf.CodeModel = getCodeModel(CGOpts);
   Conf.MAttrs = TOpts.Features;
-  Conf.RelocModel = getRelocModel(CGOpts);
+  Conf.RelocModel = CGOpts.RelocationModel;
   Conf.CGOptLevel = getCGOptLevel(CGOpts);
   initTargetOptions(Conf.Options, CGOpts, TOpts, LOpts, HeaderOpts);
   Conf.SampleProfile = std::move(SampleProfile);
Index: clang/include/clang/Frontend/CodeGenOptions.h
===
--- clang/include/clang/Frontend/CodeGenOptions.h
+++ clang/include/clang/Frontend/CodeGenOptions.h
@@ -16,6 +16,7 @@
 
 #include "clang/Basic/DebugInfoOptions.h"
 #include "clang/Basic/Sanitizers.h"
+#include "llvm/Support/CodeGen.h"
 #include "llvm/Support/Regex.h"
 #include "llvm/Target/TargetOptions.h"
 #include 
@@ -167,7 +168,7 @@
   std::string SplitDwarfFile;
 
   /// The name of the relocation model to use.
-  std::string RelocationModel;
+  llvm::Reloc::Model RelocationModel;
 
   /// The thread model to use
   std::string ThreadModel;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits