diff options
Diffstat (limited to 'llvm/lib/Object/IRSymtab.cpp')
-rw-r--r-- | llvm/lib/Object/IRSymtab.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp index 668cf62..7fc84e2 100644 --- a/llvm/lib/Object/IRSymtab.cpp +++ b/llvm/lib/Object/IRSymtab.cpp @@ -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)); } |