[llvm] r337995 - [Support] Introduce createStringError helper function
Victor Leschuk via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 25 19:21:40 PDT 2018
Author: vleschuk
Date: Wed Jul 25 19:21:40 2018
New Revision: 337995
URL: http://llvm.org/viewvc/llvm-project?rev=337995&view=rev
Log:
[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
Modified:
llvm/trunk/include/llvm/Support/Error.h
llvm/trunk/lib/Support/Error.cpp
llvm/trunk/unittests/Support/ErrorTest.cpp
Modified: llvm/trunk/include/llvm/Support/Error.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Error.h?rev=337995&r1=337994&r2=337995&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Error.h (original)
+++ llvm/trunk/include/llvm/Support/Error.h Wed Jul 25 19:21:40 2018
@@ -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.
Modified: llvm/trunk/lib/Support/Error.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Error.cpp?rev=337995&r1=337994&r2=337995&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Error.cpp (original)
+++ llvm/trunk/lib/Support/Error.cpp Wed Jul 25 19:21:40 2018
@@ -112,6 +112,10 @@ std::error_code StringError::convertToEr
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;
Modified: llvm/trunk/unittests/Support/ErrorTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/ErrorTest.cpp?rev=337995&r1=337994&r2=337995&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/ErrorTest.cpp (original)
+++ llvm/trunk/unittests/Support/ErrorTest.cpp Wed Jul 25 19:21:40 2018
@@ -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;
More information about the llvm-commits
mailing list