diff --git a/llvm/test/tools/llvm-link/archivell.ll b/llvm/test/tools/llvm-link/archivell.ll index e8e40a2a572e6..5a90990d46639 100644 --- a/llvm/test/tools/llvm-link/archivell.ll +++ b/llvm/test/tools/llvm-link/archivell.ll @@ -1,4 +1,3 @@ -# XFAIL: system-aix # RUN: llvm-ar cr %t.fg.a %S/Inputs/f.ll %S/Inputs/g.ll # RUN: not llvm-link %S/Inputs/h.ll %t.fg.a -o %t.linked.bc 2>&1 | FileCheck %s diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp index 9abe8efaa4e88..1c09eb581f2be 100644 --- a/llvm/tools/llvm-link/llvm-link.cpp +++ b/llvm/tools/llvm-link/llvm-link.cpp @@ -164,11 +164,16 @@ static std::unique_ptr loadArFile(const char *Argv0, if (Verbose) errs() << "Reading library archive file '" << ArchiveName << "' to memory\n"; - Error Err = Error::success(); - object::Archive Archive(*Buffer, Err); - ExitOnErr(std::move(Err)); + Expected> ArchiveOrError = + object::Archive::create(Buffer->getMemBufferRef()); + if (!ArchiveOrError) + ExitOnErr(ArchiveOrError.takeError()); + + std::unique_ptr Archive = std::move(ArchiveOrError.get()); + Linker L(*Result); - for (const object::Archive::Child &C : Archive.children(Err)) { + Error Err = Error::success(); + for (const object::Archive::Child &C : Archive->children(Err)) { Expected Ename = C.getName(); if (Error E = Ename.takeError()) { errs() << Argv0 << ": ";