diff options
author | Matthew Voss <matthew.voss@sony.com> | 2018-12-19 19:07:45 +0000 |
---|---|---|
committer | Matthew Voss <matthew.voss@sony.com> | 2018-12-19 19:07:45 +0000 |
commit | 62fcfc5adb99bebdb90a397fc2dfc8652dd0de6f (patch) | |
tree | d9b8de5347b773a28b85e7df560fbd7b5801ceeb /llvm/lib/LTO/LTO.cpp | |
parent | ebaba9df3ad61e2c5daddbbcbbf677c62b242c16 (diff) | |
download | bcm5719-llvm-62fcfc5adb99bebdb90a397fc2dfc8652dd0de6f.tar.gz bcm5719-llvm-62fcfc5adb99bebdb90a397fc2dfc8652dd0de6f.zip |
[ThinLTO] Remove dllimport attribute from locally defined symbols
Summary:
The LTO/ThinLTO driver currently creates invalid bitcode by setting
symbols marked dllimport as dso_local. The compiler often has access
to the definition (often dllexport) and the declaration (often
dllimport) of an object at link-time, leading to a conflicting
declaration. This patch resolves the inconsistency by removing the
dllimport attribute.
Reviewers: tejohnson, pcc, rnk, echristo
Reviewed By: rnk
Subscribers: dmikulin, wristow, mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, dang, llvm-commits
Differential Revision: https://reviews.llvm.org/D55627
llvm-svn: 349667
Diffstat (limited to 'llvm/lib/LTO/LTO.cpp')
-rw-r--r-- | llvm/lib/LTO/LTO.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp index 08924fb92dd..f736ef8b7f9 100644 --- a/llvm/lib/LTO/LTO.cpp +++ b/llvm/lib/LTO/LTO.cpp @@ -693,8 +693,12 @@ LTO::addRegularLTO(BitcodeModule BM, ArrayRef<InputFile::Symbol> Syms, } // Set the 'local' flag based on the linker resolution for this symbol. - if (Res.FinalDefinitionInLinkageUnit) + if (Res.FinalDefinitionInLinkageUnit) { GV->setDSOLocal(true); + if (GV->hasDLLImportStorageClass()) + GV->setDLLStorageClass(GlobalValue::DLLStorageClassTypes:: + DefaultStorageClass); + } } // Common resolution: collect the maximum size/alignment over all commons. // We also record if we see an instance of a common as prevailing, so that |