diff --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h --- a/llvm/include/llvm/Support/Error.h +++ b/llvm/include/llvm/Support/Error.h @@ -704,6 +704,12 @@ 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 @@ 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 @@ 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 --- a/llvm/unittests/Support/ErrorTest.cpp +++ b/llvm/unittests/Support/ErrorTest.cpp @@ -390,7 +390,8 @@ }; 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 @@ }; 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 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("foo", inconvertibleErrorCode()), - "Cantfail call failed"), - "Cantfail call failed") - << "cantFail(Error) did not cause an abort for failure value"; + EXPECT_DEATH(cantFail(make_error("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( {