Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 203c90b

Browse files
committed
Convert the archive writer to use Error.
This found one place in lld that was not checking the error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313937 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent b9223fa commit 203c90b

File tree

6 files changed

+35
-37
lines changed

6 files changed

+35
-37
lines changed

include/llvm/Object/ArchiveWriter.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include "llvm/ADT/StringRef.h"
1818
#include "llvm/Object/Archive.h"
19+
#include "llvm/Support/Error.h"
1920
#include "llvm/Support/FileSystem.h"
2021

2122
namespace llvm {
@@ -37,10 +38,10 @@ struct NewArchiveMember {
3738
bool Deterministic);
3839
};
3940

40-
std::error_code
41-
writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
42-
bool WriteSymtab, object::Archive::Kind Kind, bool Deterministic,
43-
bool Thin, std::unique_ptr<MemoryBuffer> OldArchiveBuf = nullptr);
41+
Error writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
42+
bool WriteSymtab, object::Archive::Kind Kind,
43+
bool Deterministic, bool Thin,
44+
std::unique_ptr<MemoryBuffer> OldArchiveBuf = nullptr);
4445
}
4546

4647
#endif

include/llvm/Object/COFFImportFile.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,9 @@ struct COFFShortExport {
9696
}
9797
};
9898

99-
std::error_code writeImportLibrary(StringRef ImportName,
100-
StringRef Path,
101-
ArrayRef<COFFShortExport> Exports,
102-
COFF::MachineTypes Machine,
103-
bool MakeWeakAliases);
99+
Error writeImportLibrary(StringRef ImportName, StringRef Path,
100+
ArrayRef<COFFShortExport> Exports,
101+
COFF::MachineTypes Machine, bool MakeWeakAliases);
104102

105103
} // namespace object
106104
} // namespace llvm

lib/Object/ArchiveWriter.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ static sys::TimePoint<std::chrono::seconds> now(bool Deterministic) {
278278
}
279279

280280
// Returns the offset of the first reference to a member offset.
281-
static ErrorOr<unsigned>
281+
static Expected<unsigned>
282282
writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind,
283283
ArrayRef<NewArchiveMember> Members,
284284
std::vector<unsigned> &MemberOffsetRefs, bool Deterministic) {
@@ -320,8 +320,8 @@ writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind,
320320
continue;
321321

322322
unsigned NameOffset = NameOS.tell();
323-
if (auto EC = S.printName(NameOS))
324-
return EC;
323+
if (std::error_code EC = S.printName(NameOS))
324+
return errorCodeToError(EC);
325325
NameOS << '\0';
326326
MemberOffsetRefs.push_back(MemberNum);
327327
if (isBSDLike(Kind))
@@ -373,17 +373,17 @@ writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind,
373373
return BodyStartOffset + 4;
374374
}
375375

376-
std::error_code
377-
llvm::writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
378-
bool WriteSymtab, object::Archive::Kind Kind,
379-
bool Deterministic, bool Thin,
380-
std::unique_ptr<MemoryBuffer> OldArchiveBuf) {
376+
Error llvm::writeArchive(StringRef ArcName,
377+
ArrayRef<NewArchiveMember> NewMembers,
378+
bool WriteSymtab, object::Archive::Kind Kind,
379+
bool Deterministic, bool Thin,
380+
std::unique_ptr<MemoryBuffer> OldArchiveBuf) {
381381
assert((!Thin || !isBSDLike(Kind)) && "Only the gnu format has a thin mode");
382382
SmallString<128> TmpArchive;
383383
int TmpArchiveFD;
384384
if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a",
385385
TmpArchiveFD, TmpArchive))
386-
return EC;
386+
return errorCodeToError(EC);
387387

388388
tool_output_file Output(TmpArchive, TmpArchiveFD);
389389
raw_fd_ostream &Out = Output.os();
@@ -396,10 +396,10 @@ llvm::writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
396396

397397
unsigned MemberReferenceOffset = 0;
398398
if (WriteSymtab) {
399-
ErrorOr<unsigned> MemberReferenceOffsetOrErr = writeSymbolTable(
399+
Expected<unsigned> MemberReferenceOffsetOrErr = writeSymbolTable(
400400
Out, Kind, NewMembers, MemberOffsetRefs, Deterministic);
401-
if (auto EC = MemberReferenceOffsetOrErr.getError())
402-
return EC;
401+
if (auto E = MemberReferenceOffsetOrErr.takeError())
402+
return E;
403403
MemberReferenceOffset = MemberReferenceOffsetOrErr.get();
404404
}
405405

@@ -461,5 +461,5 @@ llvm::writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
461461
OldArchiveBuf.reset();
462462

463463
sys::fs::rename(TmpArchive, ArcName);
464-
return std::error_code();
464+
return Error::success();
465465
}

lib/Object/COFFImportFile.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -558,9 +558,9 @@ NewArchiveMember ObjectFactory::createWeakExternal(StringRef Sym,
558558
return {MemoryBufferRef(StringRef(Buf, Buffer.size()), ImportName)};
559559
}
560560

561-
std::error_code writeImportLibrary(StringRef ImportName, StringRef Path,
562-
ArrayRef<COFFShortExport> Exports,
563-
MachineTypes Machine, bool MakeWeakAliases) {
561+
Error writeImportLibrary(StringRef ImportName, StringRef Path,
562+
ArrayRef<COFFShortExport> Exports,
563+
MachineTypes Machine, bool MakeWeakAliases) {
564564

565565
std::vector<NewArchiveMember> Members;
566566
ObjectFactory OF(llvm::sys::path::filename(ImportName), Machine);
@@ -596,9 +596,8 @@ std::error_code writeImportLibrary(StringRef ImportName, StringRef Path,
596596
? SymbolName
597597
: replace(SymbolName, E.Name, E.ExtName);
598598

599-
if (!Name) {
600-
return errorToErrorCode(Name.takeError());
601-
}
599+
if (!Name)
600+
return Name.takeError();
602601

603602
Members.push_back(
604603
OF.createShortImport(*Name, E.Ordinal, ImportType, NameType));

lib/ToolDrivers/llvm-lib/LibDriver.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,13 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
157157

158158
// Create an archive file.
159159
std::string OutputPath = getOutputPath(&Args, Members[0]);
160-
std::error_code EC =
161-
writeArchive(OutputPath, Members,
162-
/*WriteSymtab=*/true, object::Archive::K_GNU,
163-
/*Deterministic*/ true, Args.hasArg(OPT_llvmlibthin));
164-
165-
if (EC) {
166-
llvm::errs() << OutputPath << ": " << EC.message() << "\n";
160+
if (Error E =
161+
writeArchive(OutputPath, Members,
162+
/*WriteSymtab=*/true, object::Archive::K_GNU,
163+
/*Deterministic*/ true, Args.hasArg(OPT_llvmlibthin))) {
164+
handleAllErrors(std::move(E), [&](const ErrorInfoBase &EI) {
165+
llvm::errs() << OutputPath << ": " << EI.message() << "\n";
166+
});
167167
return 1;
168168
}
169169

tools/llvm-ar/llvm-ar.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -681,10 +681,10 @@ performWriteOperation(ArchiveOperation Operation,
681681
break;
682682
}
683683

684-
std::error_code EC =
684+
Error E =
685685
writeArchive(ArchiveName, NewMembersP ? *NewMembersP : NewMembers, Symtab,
686686
Kind, Deterministic, Thin, std::move(OldArchiveBuf));
687-
failIfError(EC, ArchiveName);
687+
failIfError(std::move(E), ArchiveName);
688688
}
689689

690690
static void createSymbolTable(object::Archive *OldArchive) {

0 commit comments

Comments
 (0)