mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[Support] Introduce createStringError helper function
The function in question is copy-pasted lots of times in DWARF-related classes. Thus it will make sense to place its implementation into the Support library. Reviewed by: lhames Differential Revision: https://reviews.llvm.org/D49824 llvm-svn: 337995
This commit is contained in:
parent
fd40eb8b72
commit
c6c6491aff
@ -24,6 +24,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
@ -1121,6 +1122,18 @@ private:
|
||||
std::error_code EC;
|
||||
};
|
||||
|
||||
/// Create formatted StringError object.
|
||||
template <typename... Ts>
|
||||
Error createStringError(std::error_code EC, char const *Fmt,
|
||||
const Ts &... Vals) {
|
||||
std::string Buffer;
|
||||
raw_string_ostream Stream(Buffer);
|
||||
Stream << format(Fmt, Vals...);
|
||||
return make_error<StringError>(Stream.str(), EC);
|
||||
}
|
||||
|
||||
Error createStringError(std::error_code EC, char const *Msg);
|
||||
|
||||
/// Helper for check-and-exit error handling.
|
||||
///
|
||||
/// For tool use only. NOT FOR USE IN LIBRARY CODE.
|
||||
|
@ -112,6 +112,10 @@ std::error_code StringError::convertToErrorCode() const {
|
||||
return EC;
|
||||
}
|
||||
|
||||
Error createStringError(std::error_code EC, char const *Msg) {
|
||||
return make_error<StringError>(Msg, EC);
|
||||
}
|
||||
|
||||
void report_fatal_error(Error Err, bool GenCrashDiag) {
|
||||
assert(Err && "report_fatal_error called with success value");
|
||||
std::string ErrMsg;
|
||||
|
@ -443,6 +443,29 @@ TEST(Error, StringError) {
|
||||
<< "Failed to convert StringError to error_code.";
|
||||
}
|
||||
|
||||
TEST(Error, createStringError) {
|
||||
static const char *Bar = "bar";
|
||||
static const std::error_code EC = errc::invalid_argument;
|
||||
std::string Msg;
|
||||
raw_string_ostream S(Msg);
|
||||
logAllUnhandledErrors(createStringError(EC, "foo%s%d0x%" PRIx8, Bar, 1, 0xff),
|
||||
S, "");
|
||||
EXPECT_EQ(S.str(), "foobar10xff\n")
|
||||
<< "Unexpected createStringError() log result";
|
||||
|
||||
S.flush();
|
||||
Msg.clear();
|
||||
logAllUnhandledErrors(createStringError(EC, Bar), S, "");
|
||||
EXPECT_EQ(S.str(), "bar\n")
|
||||
<< "Unexpected createStringError() (overloaded) log result";
|
||||
|
||||
S.flush();
|
||||
Msg.clear();
|
||||
auto Res = errorToErrorCode(createStringError(EC, "foo%s", Bar));
|
||||
EXPECT_EQ(Res, EC)
|
||||
<< "Failed to convert createStringError() result to error_code.";
|
||||
}
|
||||
|
||||
// Test that the ExitOnError utility works as expected.
|
||||
TEST(Error, ExitOnError) {
|
||||
ExitOnError ExitOnErr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user