forked from OSchip/llvm-project
[llvm-exegesis] Fix error propagation from yaml writing (from serialization)
Investigating https://bugs.llvm.org/show_bug.cgi?id=41448 llvm-svn: 358076
This commit is contained in:
parent
9b765de6dd
commit
628f1ae504
|
@ -365,27 +365,34 @@ InstructionBenchmark::readYamls(const LLVMState &State,
|
|||
}
|
||||
}
|
||||
|
||||
void InstructionBenchmark::writeYamlTo(const LLVMState &State,
|
||||
llvm::raw_ostream &OS) {
|
||||
llvm::Error InstructionBenchmark::writeYamlTo(const LLVMState &State,
|
||||
llvm::raw_ostream &OS) {
|
||||
llvm::yaml::Output Yout(OS, nullptr /*Ctx*/, 200 /*WrapColumn*/);
|
||||
YamlContext Context(State);
|
||||
Yout.beginDocuments();
|
||||
llvm::yaml::yamlize(Yout, *this, /*unused*/ true, Context);
|
||||
if (!Context.getLastError().empty())
|
||||
return llvm::make_error<BenchmarkFailure>(Context.getLastError());
|
||||
Yout.endDocuments();
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
void InstructionBenchmark::readYamlFrom(const LLVMState &State,
|
||||
llvm::StringRef InputContent) {
|
||||
llvm::Error InstructionBenchmark::readYamlFrom(const LLVMState &State,
|
||||
llvm::StringRef InputContent) {
|
||||
llvm::yaml::Input Yin(InputContent);
|
||||
YamlContext Context(State);
|
||||
if (Yin.setCurrentDocument())
|
||||
llvm::yaml::yamlize(Yin, *this, /*unused*/ true, Context);
|
||||
if (!Context.getLastError().empty())
|
||||
return llvm::make_error<BenchmarkFailure>(Context.getLastError());
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
llvm::Error InstructionBenchmark::writeYaml(const LLVMState &State,
|
||||
const llvm::StringRef Filename) {
|
||||
if (Filename == "-") {
|
||||
writeYamlTo(State, llvm::outs());
|
||||
if (auto Err = writeYamlTo(State, llvm::outs()))
|
||||
return std::move(Err);
|
||||
} else {
|
||||
int ResultFD = 0;
|
||||
if (auto E = llvm::errorCodeToError(
|
||||
|
@ -394,7 +401,8 @@ llvm::Error InstructionBenchmark::writeYaml(const LLVMState &State,
|
|||
return E;
|
||||
}
|
||||
llvm::raw_fd_ostream Ostr(ResultFD, true /*shouldClose*/);
|
||||
writeYamlTo(State, Ostr);
|
||||
if (auto Err = writeYamlTo(State, Ostr))
|
||||
return std::move(Err);
|
||||
}
|
||||
return llvm::Error::success();
|
||||
}
|
||||
|
|
|
@ -79,10 +79,11 @@ struct InstructionBenchmark {
|
|||
static llvm::Expected<std::vector<InstructionBenchmark>>
|
||||
readYamls(const LLVMState &State, llvm::StringRef Filename);
|
||||
|
||||
void readYamlFrom(const LLVMState &State, llvm::StringRef InputContent);
|
||||
llvm::Error readYamlFrom(const LLVMState &State,
|
||||
llvm::StringRef InputContent);
|
||||
|
||||
// Write functions, non-const because of YAML traits.
|
||||
void writeYamlTo(const LLVMState &State, llvm::raw_ostream &S);
|
||||
llvm::Error writeYamlTo(const LLVMState &State, llvm::raw_ostream &S);
|
||||
|
||||
llvm::Error writeYaml(const LLVMState &State, const llvm::StringRef Filename);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue