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}
diff --git a/rtc_base/checks.h b/rtc_base/checks.h
index 8d361cf..0b461c8 100644
--- a/rtc_base/checks.h
+++ b/rtc_base/checks.h
@@ -367,32 +367,36 @@
 // 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.
 #if RTC_CHECK_MSG_ENABLED
-#define RTC_CHECK(condition)                                       \
-  while (!(condition))                                             \
-  rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, __LINE__, \
-                                               #condition) &       \
-      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(condition)                                  \
+  (condition) ? static_cast<void>(0)                          \
+              : rtc::webrtc_checks_impl::FatalLogCall<false>( \
+                    __FILE__, __LINE__, #condition) &         \
+                    rtc::webrtc_checks_impl::LogStreamer<>()
 
 #define RTC_CHECK_OP(name, op, val1, val2)                                     \
-  while (!rtc::Safe##name((val1), (val2)))                                     \
-  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<>()
+  rtc::Safe##name((val1), (val2))                                              \
+      ? static_cast<void>(0)                                                   \
+      : rtc::webrtc_checks_impl::FatalLogCall<true>(__FILE__, __LINE__,        \
+                                                    #val1 " " #op " " #val2) & \
+            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
 
 #define RTC_CHECK_EQ(val1, val2) RTC_CHECK_OP(Eq, ==, val1, val2)