mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-18 03:07:52 +00:00
Object: Downgrade invalid weak externals from an assert fail to an llvm::Error when creating an irsymtab.
This fixes bitcode emission for modules containing invalid weak externals. llvm-svn: 312686
This commit is contained in:
parent
61f47b81ab
commit
9dbee112d7
@ -231,11 +231,14 @@ Error Builder::addSymbol(const ModuleSymbolTable &Msymtab,
|
||||
|
||||
if ((Flags & object::BasicSymbolRef::SF_Weak) &&
|
||||
(Flags & object::BasicSymbolRef::SF_Indirect)) {
|
||||
auto *Fallback = dyn_cast<GlobalValue>(
|
||||
cast<GlobalAlias>(GV)->getAliasee()->stripPointerCasts());
|
||||
if (!Fallback)
|
||||
return make_error<StringError>("Invalid weak external",
|
||||
inconvertibleErrorCode());
|
||||
std::string FallbackName;
|
||||
raw_string_ostream OS(FallbackName);
|
||||
Msymtab.printSymbolName(
|
||||
OS, cast<GlobalValue>(
|
||||
cast<GlobalAlias>(GV)->getAliasee()->stripPointerCasts()));
|
||||
Msymtab.printSymbolName(OS, Fallback);
|
||||
OS.flush();
|
||||
setStr(Uncommon().COFFWeakExternFallbackName, Saver.save(FallbackName));
|
||||
}
|
||||
|
11
test/Bitcode/invalid-weak-external.ll
Normal file
11
test/Bitcode/invalid-weak-external.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; REQUIRES: x86-registered-target
|
||||
; RUN: opt -o %t %s
|
||||
; RUN: not llvm-lto2 dump-symtab %t 2>&1 | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||
target triple = "x86_64-pc-windows-msvc"
|
||||
|
||||
@bar = global i32 0
|
||||
|
||||
; CHECK: Invalid weak external
|
||||
@foo = weak alias i32, i32* getelementptr (i32, i32* @bar, i32 1)
|
Loading…
x
Reference in New Issue
Block a user