diff options
-rw-r--r-- | llvm/include/llvm/Support/Error.h | 20 | ||||
-rw-r--r-- | llvm/unittests/Support/ErrorTest.cpp | 17 |
2 files changed, 30 insertions, 7 deletions
diff --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h index f961a29b33a..350877a219b 100644 --- a/llvm/include/llvm/Support/Error.h +++ b/llvm/include/llvm/Support/Error.h @@ -704,6 +704,12 @@ inline void cantFail(Error Err, const char *Msg = nullptr) { if (Err) { if (!Msg) Msg = "Failure value returned from cantFail wrapped call"; +#ifndef NDEBUG + std::string Str; + raw_string_ostream OS(Str); + OS << Msg << "\n" << Err; + Msg = OS.str().c_str(); +#endif llvm_unreachable(Msg); } } @@ -728,6 +734,13 @@ T cantFail(Expected<T> ValOrErr, const char *Msg = nullptr) { else { if (!Msg) Msg = "Failure value returned from cantFail wrapped call"; +#ifndef NDEBUG + std::string Str; + raw_string_ostream OS(Str); + auto E = ValOrErr.takeError(); + OS << Msg << "\n" << E; + Msg = OS.str().c_str(); +#endif llvm_unreachable(Msg); } } @@ -752,6 +765,13 @@ T& cantFail(Expected<T&> ValOrErr, const char *Msg = nullptr) { else { if (!Msg) Msg = "Failure value returned from cantFail wrapped call"; +#ifndef NDEBUG + std::string Str; + raw_string_ostream OS(Str); + auto E = ValOrErr.takeError(); + OS << Msg << "\n" << E; + Msg = OS.str().c_str(); +#endif llvm_unreachable(Msg); } } diff --git a/llvm/unittests/Support/ErrorTest.cpp b/llvm/unittests/Support/ErrorTest.cpp index c4a9f3e5168..2cac94d645b 100644 --- a/llvm/unittests/Support/ErrorTest.cpp +++ b/llvm/unittests/Support/ErrorTest.cpp @@ -390,7 +390,8 @@ TEST(Error, FailureToHandle) { }; EXPECT_DEATH(FailToHandle(), - "Failure value returned from cantFail wrapped call") + "Failure value returned from cantFail wrapped call\n" + "CustomError \\{7\\}") << "Unhandled Error in handleAllErrors call did not cause an " "abort()"; } @@ -409,7 +410,8 @@ TEST(Error, FailureFromHandler) { }; EXPECT_DEATH(ReturnErrorFromHandler(), - "Failure value returned from cantFail wrapped call") + "Failure value returned from cantFail wrapped call\n" + "CustomError \\{7\\}") << " Error returned from handler in handleAllErrors call did not " "cause abort()"; } @@ -510,11 +512,12 @@ TEST(Error, CantFailSuccess) { // Test that cantFail results in a crash if you pass it a failure value. #if LLVM_ENABLE_ABI_BREAKING_CHECKS && !defined(NDEBUG) TEST(Error, CantFailDeath) { - EXPECT_DEATH( - cantFail(make_error<StringError>("foo", inconvertibleErrorCode()), - "Cantfail call failed"), - "Cantfail call failed") - << "cantFail(Error) did not cause an abort for failure value"; + EXPECT_DEATH(cantFail(make_error<StringError>("Original error message", + inconvertibleErrorCode()), + "Cantfail call failed"), + "Cantfail call failed\n" + "Original error message") + << "cantFail(Error) did not cause an abort for failure value"; EXPECT_DEATH( { |