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

@ -368,28 +368,32 @@ class FatalLogCall final {
// 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) \ #define RTC_CHECK_OP(name, op, val1, val2) \
while (!rtc::Safe##name((val1), (val2))) \ rtc::Safe##name((val1), (val2)) \
rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \ ? static_cast<void>(0) \
: rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \
#val1 " " #op " " #val2) & \ #val1 " " #op " " #val2) & \
rtc::webrtc_checks_impl::LogStreamer<>() << (val1) << (val2) rtc::webrtc_checks_impl::LogStreamer<>() << (val1) << (val2)
#else #else
#define RTC_CHECK(condition) \ #define RTC_CHECK(condition) \
while (!(condition)) \ (condition) \
true \ ? static_cast<void>(0) \
? rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, __LINE__, "") & \ : true ? rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, \
__LINE__, "") & \
rtc::webrtc_checks_impl::LogStreamer<>() \ rtc::webrtc_checks_impl::LogStreamer<>() \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \ : rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \
rtc::webrtc_checks_impl::LogStreamer<>() 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) \
: true ? rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__, \
"") & \
rtc::webrtc_checks_impl::LogStreamer<>() \ rtc::webrtc_checks_impl::LogStreamer<>() \
: rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \ : rtc::webrtc_checks_impl::FatalLogCall<false>("", 0, "") & \
rtc::webrtc_checks_impl::LogStreamer<>() rtc::webrtc_checks_impl::LogStreamer<>()