diff options
| author | Teresa Johnson <tejohnson@google.com> | 2017-01-18 16:58:43 +0000 |
|---|---|---|
| committer | Teresa Johnson <tejohnson@google.com> | 2017-01-18 16:58:43 +0000 |
| commit | 2d384ac381339a2dd2659f72729775a622e34b5d (patch) | |
| tree | 9df6d100f69e95fd36e67b8f1fc0455cedcc600b /llvm/lib/CodeGen | |
| parent | 6afbaf0944a04d93b1263ec86b809a44d2a54abc (diff) | |
| download | bcm5719-llvm-2d384ac381339a2dd2659f72729775a622e34b5d.tar.gz bcm5719-llvm-2d384ac381339a2dd2659f72729775a622e34b5d.zip | |
Don't create a comdat group for a dropped def with initializer
Non-prevailing weak/linkonce odr symbols will be dropped by ThinLTO to
available_externally when possible. If they had an initializer in the
global_ctors list, a comdat group was being created. This code
already had logic to skip available_externally defs, but now the
EliminateAvailableExternally pass will drop these symbols to
declarations earlier. Change the check to skip all declarations for
linker (which includes available_externally along with declarations).
Reviewers: mehdi_amini
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28737
llvm-svn: 292408
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 9f6caa95a9e..821e336a823 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1644,8 +1644,11 @@ void AsmPrinter::EmitXXStructorList(const DataLayout &DL, const Constant *List, const TargetLoweringObjectFile &Obj = getObjFileLowering(); const MCSymbol *KeySym = nullptr; if (GlobalValue *GV = S.ComdatKey) { - if (GV->hasAvailableExternallyLinkage()) - // If the associated variable is available_externally, some other TU + if (GV->isDeclarationForLinker()) + // If the associated variable is not defined in this module + // (it might be available_externally, or have been an + // available_externally definition that was dropped by the + // EliminateAvailableExternally pass), some other TU // will provide its dynamic initializer. continue; |

