mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:30:12 +01:00
Switch to PrettyStackTrace for CHECK/FATAL (#2373)
At present, CHECK/FATAL print their own stack trace. This switches to just using std::abort for the stack trace, as well as the CHECK printing more completely. This has a few consequences: 1) I'm now buffering the FATAL strings in order to print it later. 2) We now print the bug report message and program arguments on failure. This is part of pretty printing and was elided before. 3) We can now have pretty printing on FATAL, e.g. to show the stacks we're building in the parser.
This commit is contained in:
+12
-6
@@ -13,9 +13,11 @@ TEST(CheckTest, CheckTrue) { CARBON_CHECK(true); }
|
||||
|
||||
TEST(CheckTest, CheckFalse) {
|
||||
ASSERT_DEATH({ CARBON_CHECK(false); },
|
||||
"Stack trace:\n"
|
||||
"(.|\n)+\n"
|
||||
"CHECK failure at common/check_test.cpp:\\d+: false\n");
|
||||
"\nCHECK failure at common/check_test.cpp:\\d+: false\n");
|
||||
}
|
||||
|
||||
TEST(CheckTest, CheckFalseHasStackDump) {
|
||||
ASSERT_DEATH({ CARBON_CHECK(false); }, "\nStack dump:\n");
|
||||
}
|
||||
|
||||
TEST(CheckTest, CheckTrueCallbackNotUsed) {
|
||||
@@ -30,7 +32,7 @@ TEST(CheckTest, CheckTrueCallbackNotUsed) {
|
||||
|
||||
TEST(CheckTest, CheckFalseMessage) {
|
||||
ASSERT_DEATH({ CARBON_CHECK(false) << "msg"; },
|
||||
"CHECK failure at common/check_test.cpp:.+: false: msg\n");
|
||||
"\nCHECK failure at common/check_test.cpp:.+: false: msg\n");
|
||||
}
|
||||
|
||||
TEST(CheckTest, CheckOutputForms) {
|
||||
@@ -42,14 +44,18 @@ TEST(CheckTest, CheckOutputForms) {
|
||||
|
||||
TEST(CheckTest, Fatal) {
|
||||
ASSERT_DEATH({ CARBON_FATAL() << "msg"; },
|
||||
"FATAL failure at common/check_test.cpp:.+: msg\n");
|
||||
"\nFATAL failure at common/check_test.cpp:.+: msg\n");
|
||||
}
|
||||
|
||||
TEST(CheckTest, FatalHasStackDump) {
|
||||
ASSERT_DEATH({ CARBON_FATAL() << "msg"; }, "\nStack dump:\n");
|
||||
}
|
||||
|
||||
auto FatalNoReturnRequired() -> int { CARBON_FATAL() << "msg"; }
|
||||
|
||||
TEST(ErrorTest, FatalNoReturnRequired) {
|
||||
ASSERT_DEATH({ FatalNoReturnRequired(); },
|
||||
"FATAL failure at common/check_test.cpp:.+: msg\n");
|
||||
"\nFATAL failure at common/check_test.cpp:.+: msg\n");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user