From 4899a923db9849357accf8d6b580a273fc1b2629 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Thu, 7 Sep 2017 01:33:52 +0000 Subject: 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 --- llvm/lib/Object/IRSymtab.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Object/IRSymtab.cpp') diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp index 668cf62d1e8..7fc84e2046c 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( + cast(GV)->getAliasee()->stripPointerCasts()); + if (!Fallback) + return make_error("Invalid weak external", + inconvertibleErrorCode()); std::string FallbackName; raw_string_ostream OS(FallbackName); - Msymtab.printSymbolName( - OS, cast( - cast(GV)->getAliasee()->stripPointerCasts())); + Msymtab.printSymbolName(OS, Fallback); OS.flush(); setStr(Uncommon().COFFWeakExternFallbackName, Saver.save(FallbackName)); } -- cgit v1.2.3