diff options
| author | Hans Wennborg <hans@hanshq.net> | 2014-09-10 19:28:48 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2014-09-10 19:28:48 +0000 |
| commit | 7b556ead93561522b88d926230db1bba26a9f62e (patch) | |
| tree | 7e4c50671f36fd4b6637e481f789791a7b350d43 /clang/lib/CodeGen | |
| parent | 1383d6f80848d0c5ce3139ba0a95b6807f10bd0f (diff) | |
| download | bcm5719-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.cpp | 5 |
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); |

