From a13ef44bf3f2ef5399c6fc587a18f3b203b4d37a Mon Sep 17 00:00:00 2001 From: Mike Kruskal Date: Tue, 13 Dec 2022 15:11:53 -0800 Subject: Prevent all CHECK functions from expanding macros for the error string. This was likely an unintentional behavior change made a while ago while trying to reduce duplication. The new behavior will always include the unexpanded macro in the error string. For example, `CHECK_EQ(MACRO(x), MACRO(y))` will now output "MACRO(x) == MACRO(y)" if it fails. Before this change, CHECK and QCHECK were the only macros that had this behavior. Not using function-like macro aliases is a possible alternative here, but unfortunately that would flood the macro namespace downstream with CHECK* and break existing code. PiperOrigin-RevId: 495138582 Change-Id: I6a1afd89a6b9334003362e5d3e55da68f86eec98 --- absl/log/absl_check.h | 98 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 37 deletions(-) (limited to 'absl/log/absl_check.h') diff --git a/absl/log/absl_check.h b/absl/log/absl_check.h index 2775adbe..14a2307f 100644 --- a/absl/log/absl_check.h +++ b/absl/log/absl_check.h @@ -37,45 +37,69 @@ #include "absl/log/internal/check_impl.h" -#define ABSL_CHECK(condition) ABSL_CHECK_IMPL(condition, #condition) -#define ABSL_QCHECK(condition) ABSL_QCHECK_IMPL(condition, #condition) -#define ABSL_PCHECK(condition) ABSL_PCHECK_IMPL(condition) -#define ABSL_DCHECK(condition) ABSL_DCHECK_IMPL(condition) +#define ABSL_CHECK(condition) ABSL_CHECK_IMPL((condition), #condition) +#define ABSL_QCHECK(condition) ABSL_QCHECK_IMPL((condition), #condition) +#define ABSL_PCHECK(condition) ABSL_PCHECK_IMPL((condition), #condition) +#define ABSL_DCHECK(condition) ABSL_DCHECK_IMPL((condition), #condition) -#define ABSL_CHECK_EQ(val1, val2) ABSL_CHECK_EQ_IMPL(val1, val2) -#define ABSL_CHECK_NE(val1, val2) ABSL_CHECK_NE_IMPL(val1, val2) -#define ABSL_CHECK_LE(val1, val2) ABSL_CHECK_LE_IMPL(val1, val2) -#define ABSL_CHECK_LT(val1, val2) ABSL_CHECK_LT_IMPL(val1, val2) -#define ABSL_CHECK_GE(val1, val2) ABSL_CHECK_GE_IMPL(val1, val2) -#define ABSL_CHECK_GT(val1, val2) ABSL_CHECK_GT_IMPL(val1, val2) -#define ABSL_QCHECK_EQ(val1, val2) ABSL_QCHECK_EQ_IMPL(val1, val2) -#define ABSL_QCHECK_NE(val1, val2) ABSL_QCHECK_NE_IMPL(val1, val2) -#define ABSL_QCHECK_LE(val1, val2) ABSL_QCHECK_LE_IMPL(val1, val2) -#define ABSL_QCHECK_LT(val1, val2) ABSL_QCHECK_LT_IMPL(val1, val2) -#define ABSL_QCHECK_GE(val1, val2) ABSL_QCHECK_GE_IMPL(val1, val2) -#define ABSL_QCHECK_GT(val1, val2) ABSL_QCHECK_GT_IMPL(val1, val2) -#define ABSL_DCHECK_EQ(val1, val2) ABSL_DCHECK_EQ_IMPL(val1, val2) -#define ABSL_DCHECK_NE(val1, val2) ABSL_DCHECK_NE_IMPL(val1, val2) -#define ABSL_DCHECK_LE(val1, val2) ABSL_DCHECK_LE_IMPL(val1, val2) -#define ABSL_DCHECK_LT(val1, val2) ABSL_DCHECK_LT_IMPL(val1, val2) -#define ABSL_DCHECK_GE(val1, val2) ABSL_DCHECK_GE_IMPL(val1, val2) -#define ABSL_DCHECK_GT(val1, val2) ABSL_DCHECK_GT_IMPL(val1, val2) +#define ABSL_CHECK_EQ(val1, val2) \ + ABSL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2) +#define ABSL_CHECK_NE(val1, val2) \ + ABSL_CHECK_NE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_CHECK_LE(val1, val2) \ + ABSL_CHECK_LE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_CHECK_LT(val1, val2) \ + ABSL_CHECK_LT_IMPL((val1), #val1, (val2), #val2) +#define ABSL_CHECK_GE(val1, val2) \ + ABSL_CHECK_GE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_CHECK_GT(val1, val2) \ + ABSL_CHECK_GT_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_EQ(val1, val2) \ + ABSL_QCHECK_EQ_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_NE(val1, val2) \ + ABSL_QCHECK_NE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_LE(val1, val2) \ + ABSL_QCHECK_LE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_LT(val1, val2) \ + ABSL_QCHECK_LT_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_GE(val1, val2) \ + ABSL_QCHECK_GE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_QCHECK_GT(val1, val2) \ + ABSL_QCHECK_GT_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_EQ(val1, val2) \ + ABSL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_NE(val1, val2) \ + ABSL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_LE(val1, val2) \ + ABSL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_LT(val1, val2) \ + ABSL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_GE(val1, val2) \ + ABSL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2) +#define ABSL_DCHECK_GT(val1, val2) \ + ABSL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2) -#define ABSL_CHECK_OK(status) ABSL_CHECK_OK_IMPL(status) -#define ABSL_QCHECK_OK(status) ABSL_QCHECK_OK_IMPL(status) -#define ABSL_DCHECK_OK(status) ABSL_DCHECK_OK_IMPL(status) +#define ABSL_CHECK_OK(status) ABSL_CHECK_OK_IMPL((status), #status) +#define ABSL_QCHECK_OK(status) ABSL_QCHECK_OK_IMPL((status), #status) +#define ABSL_DCHECK_OK(status) ABSL_DCHECK_OK_IMPL((status), #status) -#define ABSL_CHECK_STREQ(s1, s2) ABSL_CHECK_STREQ_IMPL(s1, s2) -#define ABSL_CHECK_STRNE(s1, s2) ABSL_CHECK_STRNE_IMPL(s1, s2) -#define ABSL_CHECK_STRCASEEQ(s1, s2) ABSL_CHECK_STRCASEEQ_IMPL(s1, s2) -#define ABSL_CHECK_STRCASENE(s1, s2) ABSL_CHECK_STRCASENE_IMPL(s1, s2) -#define ABSL_QCHECK_STREQ(s1, s2) ABSL_QCHECK_STREQ_IMPL(s1, s2) -#define ABSL_QCHECK_STRNE(s1, s2) ABSL_QCHECK_STRNE_IMPL(s1, s2) -#define ABSL_QCHECK_STRCASEEQ(s1, s2) ABSL_QCHECK_STRCASEEQ_IMPL(s1, s2) -#define ABSL_QCHECK_STRCASENE(s1, s2) ABSL_QCHECK_STRCASENE_IMPL(s1, s2) -#define ABSL_DCHECK_STREQ(s1, s2) ABSL_DCHECK_STREQ_IMPL(s1, s2) -#define ABSL_DCHECK_STRNE(s1, s2) ABSL_DCHECK_STRNE_IMPL(s1, s2) -#define ABSL_DCHECK_STRCASEEQ(s1, s2) ABSL_DCHECK_STRCASEEQ_IMPL(s1, s2) -#define ABSL_DCHECK_STRCASENE(s1, s2) ABSL_DCHECK_STRCASENE_IMPL(s1, s2) +#define ABSL_CHECK_STREQ(s1, s2) ABSL_CHECK_STREQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_CHECK_STRNE(s1, s2) ABSL_CHECK_STRNE_IMPL((s1), #s1, (s2), #s2) +#define ABSL_CHECK_STRCASEEQ(s1, s2) \ + ABSL_CHECK_STRCASEEQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_CHECK_STRCASENE(s1, s2) \ + ABSL_CHECK_STRCASENE_IMPL((s1), #s1, (s2), #s2) +#define ABSL_QCHECK_STREQ(s1, s2) ABSL_QCHECK_STREQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_QCHECK_STRNE(s1, s2) ABSL_QCHECK_STRNE_IMPL((s1), #s1, (s2), #s2) +#define ABSL_QCHECK_STRCASEEQ(s1, s2) \ + ABSL_QCHECK_STRCASEEQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_QCHECK_STRCASENE(s1, s2) \ + ABSL_QCHECK_STRCASENE_IMPL((s1), #s1, (s2), #s2) +#define ABSL_DCHECK_STREQ(s1, s2) ABSL_DCHECK_STREQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_DCHECK_STRNE(s1, s2) ABSL_DCHECK_STRNE_IMPL((s1), #s1, (s2), #s2) +#define ABSL_DCHECK_STRCASEEQ(s1, s2) \ + ABSL_DCHECK_STRCASEEQ_IMPL((s1), #s1, (s2), #s2) +#define ABSL_DCHECK_STRCASENE(s1, s2) \ + ABSL_DCHECK_STRCASENE_IMPL((s1), #s1, (s2), #s2) #endif // ABSL_LOG_ABSL_CHECK_H_ -- cgit v1.2.3