Merge "Base: Fix dangling-else in CHECK_STROP"
This commit is contained in:
commit
ad81a1d94a
2 changed files with 29 additions and 8 deletions
|
@ -201,14 +201,13 @@ class ErrnoRestorer {
|
|||
#define CHECK_GT(x, y) CHECK_OP(x, y, > )
|
||||
|
||||
// Helper for CHECK_STRxx(s1,s2) macros.
|
||||
#define CHECK_STROP(s1, s2, sense) \
|
||||
if (LIKELY((strcmp(s1, s2) == 0) == (sense))) \
|
||||
; \
|
||||
else \
|
||||
ABORT_AFTER_LOG_FATAL \
|
||||
LOG(FATAL) << "Check failed: " \
|
||||
<< "\"" << (s1) << "\"" \
|
||||
<< ((sense) ? " == " : " != ") << "\"" << (s2) << "\""
|
||||
#define CHECK_STROP(s1, s2, sense) \
|
||||
while (UNLIKELY((strcmp(s1, s2) == 0) != (sense))) \
|
||||
ABORT_AFTER_LOG_FATAL \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::DEFAULT, \
|
||||
::android::base::FATAL, -1).stream() \
|
||||
<< "Check failed: " << "\"" << (s1) << "\"" \
|
||||
<< ((sense) ? " == " : " != ") << "\"" << (s2) << "\""
|
||||
|
||||
// Check for string (const char*) equality between s1 and s2, LOG(FATAL) if not.
|
||||
#define CHECK_STREQ(s1, s2) CHECK_STROP(s1, s2, true)
|
||||
|
|
|
@ -120,6 +120,28 @@ TEST(logging, CHECK) {
|
|||
EXPECT_FALSE(flag) << "CHECK_STREQ probably has a dangling if with no else";
|
||||
}
|
||||
|
||||
TEST(logging, DCHECK) {
|
||||
if (android::base::kEnableDChecks) {
|
||||
ASSERT_DEATH({SuppressAbortUI(); DCHECK(false);}, "DCheck failed: false ");
|
||||
}
|
||||
DCHECK(true);
|
||||
|
||||
if (android::base::kEnableDChecks) {
|
||||
ASSERT_DEATH({SuppressAbortUI(); DCHECK_EQ(0, 1);}, "DCheck failed: 0 == 1 ");
|
||||
}
|
||||
DCHECK_EQ(0, 0);
|
||||
|
||||
if (android::base::kEnableDChecks) {
|
||||
ASSERT_DEATH({SuppressAbortUI(); DCHECK_STREQ("foo", "bar");},
|
||||
R"(DCheck failed: "foo" == "bar")");
|
||||
}
|
||||
DCHECK_STREQ("foo", "foo");
|
||||
|
||||
// No testing whether we have a dangling else, possibly. That's inherent to the if (constexpr)
|
||||
// setup we intentionally chose to force type-checks of debug code even in release builds (so
|
||||
// we don't get more bit-rot).
|
||||
}
|
||||
|
||||
static std::string make_log_pattern(android::base::LogSeverity severity,
|
||||
const char* message) {
|
||||
static const char log_characters[] = "VDIWEFF";
|
||||
|
|
Loading…
Reference in a new issue