diff options
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/IRSymtab.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Object/ModuleSymbolTable.cpp | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp index 746b008..9208f90 100644 --- a/llvm/lib/Object/IRSymtab.cpp +++ b/llvm/lib/Object/IRSymtab.cpp @@ -284,9 +284,13 @@ Error Builder::addSymbol(const ModuleSymbolTable &Msymtab, } const GlobalObject *Base = GV->getBaseObject(); - if (!Base) - return make_error<StringError>("Unable to determine comdat of alias!", - inconvertibleErrorCode()); + if (!Base) { + if (isa<GlobalIFunc>(GV)) + Base = cast<GlobalIFunc>(GV)->getResolverFunction(); + if (!Base) + return make_error<StringError>("Unable to determine comdat of alias!", + inconvertibleErrorCode()); + } if (const Comdat *C = Base->getComdat()) { Expected<int> ComdatIndexOrErr = getComdatIndex(C, GV->getParent()); if (!ComdatIndexOrErr) diff --git a/llvm/lib/Object/ModuleSymbolTable.cpp b/llvm/lib/Object/ModuleSymbolTable.cpp index 9a79de7..5ae81c9 100644 --- a/llvm/lib/Object/ModuleSymbolTable.cpp +++ b/llvm/lib/Object/ModuleSymbolTable.cpp @@ -204,7 +204,7 @@ uint32_t ModuleSymbolTable::getSymbolFlags(Symbol S) const { if (GVar->isConstant()) Res |= BasicSymbolRef::SF_Const; } - if (dyn_cast_or_null<Function>(GV->getBaseObject())) + if (isa_and_nonnull<Function>(GV->getBaseObject()) || isa<GlobalIFunc>(GV)) Res |= BasicSymbolRef::SF_Executable; if (isa<GlobalAlias>(GV)) Res |= BasicSymbolRef::SF_Indirect; |