]> granicus.if.org Git - llvm/commit
[lib/Analysis] - Mark personality functions as live.
authorGeorge Rimar <grimar@accesssoftek.com>
Tue, 22 Aug 2017 08:50:56 +0000 (08:50 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Tue, 22 Aug 2017 08:50:56 +0000 (08:50 +0000)
commit95a4133b77a6b8be19f9c338fdf8a5c9c8aa2f29
tree63bab71bdc529c9176153dc78c29d5f91af4faaa
parent03d86003806680cb5e7b955728e7331206c15562
[lib/Analysis] - Mark personality functions as live.

This is PR33245.

Case I am fixing is next:
Imagine we have 2 BC files, one defines and uses personality routine,
second has only declaration and also uses it.

Previously algorithm computing dead symbols (llvm::computeDeadSymbols) did
not know about personality routines and leaved them dead even if function that
has routine was live.

As a result thinLTOInternalizeAndPromoteGUID() method changed binding for
such symbol to local. Later when LLD tried to link these objects it failed
because one object had undefined global symbol for routine and second
object contained local definition instead of global.

Patch set the live root flag on the corresponding FunctionSummary
for personality routines when we build the per-module summaries
during the compile step.

Differential revision: https://reviews.llvm.org/D36834

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311432 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/ModuleSummaryAnalysis.cpp
test/ThinLTO/X86/Inputs/personality-local.ll [new file with mode: 0644]
test/ThinLTO/X86/Inputs/personality.ll [new file with mode: 0644]
test/ThinLTO/X86/personality-local.ll [new file with mode: 0644]
test/ThinLTO/X86/personality.ll [new file with mode: 0644]