summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-01-21 01:04:30 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-01-21 01:04:30 +0000
commit3072fc885e01e203a0f01f145c26e43d359d0728 (patch)
tree631bb8fbafa4179e0dc32ab6cd0a4e5a14ac717f
parent740d59ec499b757c4426ea33e17fdc9ee707098d (diff)
downloadbcm5719-llvm-3072fc885e01e203a0f01f145c26e43d359d0728.tar.gz
bcm5719-llvm-3072fc885e01e203a0f01f145c26e43d359d0728.zip
MS ABI: Let guard variables be present in COMDATs
A guard variable in a COMDAT'd function should also be in a COMDAT. llvm-svn: 226629
-rw-r--r--clang/lib/CodeGen/MicrosoftCXXABI.cpp3
-rw-r--r--clang/test/CodeGenCXX/dllexport.cpp4
2 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index 12029bc13b1..71d6e7800d7 100644
--- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -1923,6 +1923,9 @@ void MicrosoftCXXABI::EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
GV->getLinkage(), Zero, GuardName.str());
GI->Guard->setVisibility(GV->getVisibility());
GI->Guard->setDLLStorageClass(GV->getDLLStorageClass());
+ if (GI->Guard->isWeakForLinker())
+ GI->Guard->setComdat(
+ CGM.getModule().getOrInsertComdat(GI->Guard->getName()));
} else {
assert(GI->Guard->getLinkage() == GV->getLinkage() &&
"static local from the same function had different linkage");
diff --git a/clang/test/CodeGenCXX/dllexport.cpp b/clang/test/CodeGenCXX/dllexport.cpp
index 53c7de2ee21..0845c6dd7fc 100644
--- a/clang/test/CodeGenCXX/dllexport.cpp
+++ b/clang/test/CodeGenCXX/dllexport.cpp
@@ -82,8 +82,8 @@ int __declspec(dllexport) nonInlineStaticLocalsFunc() {
return x++;
};
-// MSC-DAG: @"\01?x@?1??inlineStaticLocalsFunc@@YAHXZ@4HA" = weak_odr dllexport global i32 0
-// MSC-DAG: @"\01??_B?1??inlineStaticLocalsFunc@@YAHXZ@51" = weak_odr dllexport global i32 0
+// MSC-DAG: @"\01?x@?1??inlineStaticLocalsFunc@@YAHXZ@4HA" = weak_odr dllexport global i32 0, comdat
+// MSC-DAG: @"\01??_B?1??inlineStaticLocalsFunc@@YAHXZ@51" = weak_odr dllexport global i32 0, comdat
// Note: MinGW doesn't seem to export the static local here.
inline int __declspec(dllexport) inlineStaticLocalsFunc() {
static int x = f();
OpenPOWER on IntegriCloud