Browse Source

unfold UNREACHABLE implementation for dumb compilers

We relies on UNREACHABLE's noreturn attribute to eliminate parent's "no return value" warning. However, this was wrapped in a `if(!false)` block, which compilers may not unfold to recognize the noreturn nature.
Weiyi Wang 6 năm trước cách đây
mục cha
commit
9a60d8a430
1 tập tin đã thay đổi với 2 bổ sung2 xóa
  1. 2 2
      src/common/assert.h

+ 2 - 2
src/common/assert.h

@@ -41,8 +41,8 @@ __declspec(noinline, noreturn)
         }                                                                                          \
         }                                                                                          \
     while (0)
     while (0)
 
 
-#define UNREACHABLE() ASSERT_MSG(false, "Unreachable code!")
-#define UNREACHABLE_MSG(...) ASSERT_MSG(false, __VA_ARGS__)
+#define UNREACHABLE() assert_noinline_call([] { LOG_CRITICAL(Debug, "Unreachable code!"); })
+#define UNREACHABLE_MSG(...) assert_noinline_call([] { LOG_CRITICAL(Debug, "Unreachable code!\n" __VA_ARGS__); })
 
 
 #ifdef _DEBUG
 #ifdef _DEBUG
 #define DEBUG_ASSERT(_a_) ASSERT(_a_)
 #define DEBUG_ASSERT(_a_) ASSERT(_a_)