summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-09-10 19:28:48 +0000
committerHans Wennborg <hans@hanshq.net>2014-09-10 19:28:48 +0000
commit7b556ead93561522b88d926230db1bba26a9f62e (patch)
tree7e4c50671f36fd4b6637e481f789791a7b350d43 /clang/lib/CodeGen
parent1383d6f80848d0c5ce3139ba0a95b6807f10bd0f (diff)
downloadbcm5719-llvm-7b556ead93561522b88d926230db1bba26a9f62e.tar.gz
bcm5719-llvm-7b556ead93561522b88d926230db1bba26a9f62e.zip
MS ABI: Emit dynamic initializers for selectany globals in comdat-associative sections (PR20889)
This prevents initializers for comdat-folded globals from running multiple times. Differential Revision: http://reviews.llvm.org/D5281 llvm-svn: 217534
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGDeclCXX.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index af5919c157f..79a05586927 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -332,6 +332,11 @@ CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D,
// COMDAT key is required for correctness.
AddGlobalCtor(Fn, 65535, Addr);
DelayedCXXInitPosition.erase(D);
+ } else if (D->hasAttr<SelectAnyAttr>()) {
+ // SelectAny globals will be comdat-folded. Put the initializer into a COMDAT
+ // group associated with the global, so the initializers get folded too.
+ AddGlobalCtor(Fn, 65535, Addr);
+ DelayedCXXInitPosition.erase(D);
} else {
llvm::DenseMap<const Decl *, unsigned>::iterator I =
DelayedCXXInitPosition.find(D);
OpenPOWER on IntegriCloud