Rewrite RTC_CHECK macros to work in constexpr expression in gcc

tested with https://webrtc-review.googlesource.com/c/src/+/161642/5

Bug: webrtc:11191
Change-Id: Ia4ad21cb6148d7d86182d8bfcaec42966fd22eb2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166524
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30317}
This commit is contained in:
Danil Chapovalov
2020-01-17 17:35:13 +01:00
committed by Commit Bot
parent 629de6f7ed
commit eeb9ccaa00

View File

@ -367,32 +367,36 @@ class FatalLogCall final {
// RTC_CHECK_OP is a helper macro for binary operators. // RTC_CHECK_OP is a helper macro for binary operators.
// Don't use this macro directly in your code, use RTC_CHECK_EQ et al below. // Don't use this macro directly in your code, use RTC_CHECK_EQ et al below.
#if RTC_CHECK_MSG_ENABLED #if RTC_CHECK_MSG_ENABLED
#define RTC_CHECK(condition) \ #define RTC_CHECK(condition) \
while (!(condition)) \ (condition) ? static_cast<void>(0) \
rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, __LINE__, \ : rtc::webrtc_checks_impl::FatalLogCall<false>( \
#condition) & \ __FILE__, __LINE__, #condition) & \
rtc::webrtc_checks_impl::LogStreamer<>() rtc::webrtc_checks_impl::LogStreamer<>()
#define RTC_CHECK_OP(name, op, val1, val2) \
while (!rtc::Safe##name((val1), (val2))) \
rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \
#val1 " " #op " " #val2) & \
rtc::webrtc_checks_impl::LogStreamer<>() << (val1) << (val2)
#else
#define RTC_CHECK(condition) \
while (!(condition)) \
true \
? rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, __LINE__, "") & \
rtc::webrtc_checks_impl::LogStreamer<>() \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \
rtc::webrtc_checks_impl::LogStreamer<>()
#define RTC_CHECK_OP(name, op, val1, val2) \ #define RTC_CHECK_OP(name, op, val1, val2) \
while (!rtc::Safe##name((val1), (val2))) \ rtc::Safe##name((val1), (val2)) \
true ? rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, "") & \ ? static_cast<void>(0) \
rtc::webrtc_checks_impl::LogStreamer<>() \ : rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \ #val1 " " #op " " #val2) & \
rtc::webrtc_checks_impl::LogStreamer<>() rtc::webrtc_checks_impl::LogStreamer<>() << (val1) << (val2)
#else
#define RTC_CHECK(condition) \
(condition) \
? static_cast<void>(0) \
: true ? rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, \
__LINE__, "") & \
rtc::webrtc_checks_impl::LogStreamer<>() \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \
rtc::webrtc_checks_impl::LogStreamer<>()
#define RTC_CHECK_OP(name, op, val1, val2) \
rtc::Safe##name((val1), (val2)) \
? static_cast<void>(0) \
: true ? rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \
"") & \
rtc::webrtc_checks_impl::LogStreamer<>() \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \
rtc::webrtc_checks_impl::LogStreamer<>()
#endif #endif
#define RTC_CHECK_EQ(val1, val2) RTC_CHECK_OP(Eq, ==, val1, val2) #define RTC_CHECK_EQ(val1, val2) RTC_CHECK_OP(Eq, ==, val1, val2)