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:
Jon Ross-Perkins
2022-11-04 14:59:39 -07:00
committed by GitHub
parent cef93fba5e
commit 8c354ca232
7 changed files with 94 additions and 36 deletions
+12 -6
View File
@@ -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