forked from OSchip/llvm-project
[llvm-dlltool] Don't crash if no def file is provided or it can't be opened
Differential Revision: https://reviews.llvm.org/D36780 llvm-svn: 311068
This commit is contained in:
parent
9e5604dbe1
commit
9d8ecb4333
|
@ -60,11 +60,13 @@ std::vector<std::unique_ptr<MemoryBuffer>> OwningMBs;
|
|||
|
||||
// Opens a file. Path has to be resolved already.
|
||||
// Newly created memory buffers are owned by this driver.
|
||||
MemoryBufferRef openFile(StringRef Path) {
|
||||
Optional<MemoryBufferRef> openFile(StringRef Path) {
|
||||
ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> MB = MemoryBuffer::getFile(Path);
|
||||
|
||||
if (std::error_code EC = MB.getError())
|
||||
if (std::error_code EC = MB.getError()) {
|
||||
llvm::errs() << "fail openFile: " << EC.message() << "\n";
|
||||
return None;
|
||||
}
|
||||
|
||||
MemoryBufferRef MBRef = MB.get()->getMemBufferRef();
|
||||
OwningMBs.push_back(std::move(MB.get())); // take ownership
|
||||
|
@ -115,11 +117,16 @@ int llvm::dlltoolDriverMain(llvm::ArrayRef<const char *> ArgsArr) {
|
|||
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
|
||||
llvm::errs() << "ignoring unknown argument: " << Arg->getSpelling() << "\n";
|
||||
|
||||
MemoryBufferRef MB;
|
||||
if (auto *Arg = Args.getLastArg(OPT_d))
|
||||
MB = openFile(Arg->getValue());
|
||||
if (!Args.hasArg(OPT_d)) {
|
||||
llvm::errs() << "no definition file specified\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!MB.getBufferSize()) {
|
||||
Optional<MemoryBufferRef> MB = openFile(Args.getLastArg(OPT_d)->getValue());
|
||||
if (!MB)
|
||||
return 1;
|
||||
|
||||
if (!MB->getBufferSize()) {
|
||||
llvm::errs() << "definition file empty\n";
|
||||
return 1;
|
||||
}
|
||||
|
@ -134,7 +141,7 @@ int llvm::dlltoolDriverMain(llvm::ArrayRef<const char *> ArgsArr) {
|
|||
}
|
||||
|
||||
Expected<COFFModuleDefinition> Def =
|
||||
parseCOFFModuleDefinition(MB, Machine, true);
|
||||
parseCOFFModuleDefinition(*MB, Machine, true);
|
||||
|
||||
if (!Def) {
|
||||
llvm::errs() << "error parsing definition\n"
|
||||
|
|
Loading…
Reference in New Issue