mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-07 01:57:16 +00:00
Fix use of uninitialized variable.
Fixes linking bitcode files that use the new style comdats for constructors with ones that don't. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cb7da63124
commit
69ca26cc97
@ -644,15 +644,19 @@ bool ModuleLinker::computeResultingSelectionKind(StringRef ComdatName,
|
|||||||
bool ModuleLinker::getComdatResult(const Comdat *SrcC,
|
bool ModuleLinker::getComdatResult(const Comdat *SrcC,
|
||||||
Comdat::SelectionKind &Result,
|
Comdat::SelectionKind &Result,
|
||||||
bool &LinkFromSrc) {
|
bool &LinkFromSrc) {
|
||||||
|
Comdat::SelectionKind SSK = SrcC->getSelectionKind();
|
||||||
StringRef ComdatName = SrcC->getName();
|
StringRef ComdatName = SrcC->getName();
|
||||||
Module::ComdatSymTabType &ComdatSymTab = DstM->getComdatSymbolTable();
|
Module::ComdatSymTabType &ComdatSymTab = DstM->getComdatSymbolTable();
|
||||||
Module::ComdatSymTabType::iterator DstCI = ComdatSymTab.find(ComdatName);
|
Module::ComdatSymTabType::iterator DstCI = ComdatSymTab.find(ComdatName);
|
||||||
|
|
||||||
if (DstCI == ComdatSymTab.end())
|
if (DstCI == ComdatSymTab.end()) {
|
||||||
|
// Use the comdat if it is only available in one of the modules.
|
||||||
|
LinkFromSrc = true;
|
||||||
|
Result = SSK;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const Comdat *DstC = &DstCI->second;
|
const Comdat *DstC = &DstCI->second;
|
||||||
Comdat::SelectionKind SSK = SrcC->getSelectionKind();
|
|
||||||
Comdat::SelectionKind DSK = DstC->getSelectionKind();
|
Comdat::SelectionKind DSK = DstC->getSelectionKind();
|
||||||
return computeResultingSelectionKind(ComdatName, SSK, DSK, Result,
|
return computeResultingSelectionKind(ComdatName, SSK, DSK, Result,
|
||||||
LinkFromSrc);
|
LinkFromSrc);
|
||||||
|
7
test/Linker/Inputs/constructor-comdat.ll
Normal file
7
test/Linker/Inputs/constructor-comdat.ll
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
define weak_odr void @_ZN3fooIiEC2Ev() {
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define weak_odr void @_ZN3fooIiEC1Ev() {
|
||||||
|
ret void
|
||||||
|
}
|
13
test/Linker/constructor-comdat.ll
Normal file
13
test/Linker/constructor-comdat.ll
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
; RUN: llvm-link %s %p/Inputs/constructor-comdat.ll -S -o - 2>&1 | FileCheck %s
|
||||||
|
; RUN: llvm-link %p/Inputs/constructor-comdat.ll %s -S -o - 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
$_ZN3fooIiEC5Ev = comdat any
|
||||||
|
; CHECK: $_ZN3fooIiEC5Ev = comdat any
|
||||||
|
|
||||||
|
@_ZN3fooIiEC1Ev = weak_odr alias void ()* @_ZN3fooIiEC2Ev
|
||||||
|
; CHECK: @_ZN3fooIiEC1Ev = weak_odr alias void ()* @_ZN3fooIiEC2Ev
|
||||||
|
|
||||||
|
; CHECK: define weak_odr void @_ZN3fooIiEC2Ev() comdat $_ZN3fooIiEC5Ev {
|
||||||
|
define weak_odr void @_ZN3fooIiEC2Ev() comdat $_ZN3fooIiEC5Ev {
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user