diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-01-21 01:04:30 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-01-21 01:04:30 +0000 |
commit | 3072fc885e01e203a0f01f145c26e43d359d0728 (patch) | |
tree | 631bb8fbafa4179e0dc32ab6cd0a4e5a14ac717f | |
parent | 740d59ec499b757c4426ea33e17fdc9ee707098d (diff) | |
download | bcm5719-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.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/dllexport.cpp | 4 |
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(); |