Index: base/check_example.cc |
diff --git a/base/check_example.cc b/base/check_example.cc |
index 4b3f4287dbf1455257dc067c4cda057d481e2e89..7b9d8e6a80e149cd065415d64c2b655e18d4f838 100644 |
--- a/base/check_example.cc |
+++ b/base/check_example.cc |
@@ -5,16 +5,27 @@ |
// This file is meant for analyzing the code generated by the CHECK |
// macros in a small executable file that's easy to disassemble. |
+#include "base/compiler_specific.h" |
#include "base/logging.h" |
// An official build shouldn't generate code to print out messages for |
// the CHECK* macros, nor should it have the strings in the |
-// executable. |
+// executable. It is also important that the CHECK() function collapse to the |
+// same implementation as RELEASE_ASSERT(), in particular on Windows x86. |
+// Historically, the stream eating caused additional unnecessary instructions. |
+// See https://crbug.com/672699. |
+ |
+#define BLINK_RELEASE_ASSERT_EQUIVALENT(assertion) \ |
+ (UNLIKELY(!(assertion)) ? (IMMEDIATE_CRASH()) : (void)0) |
void DoCheck(bool b) { |
CHECK(b) << "DoCheck " << b; |
} |
+void DoBlinkReleaseAssert(bool b) { |
+ BLINK_RELEASE_ASSERT_EQUIVALENT(b); |
+} |
+ |
void DoCheckEq(int x, int y) { |
CHECK_EQ(x, y); |
} |
@@ -22,4 +33,5 @@ void DoCheckEq(int x, int y) { |
int main(int argc, const char* argv[]) { |
DoCheck(argc > 1); |
DoCheckEq(argc, 1); |
+ DoBlinkReleaseAssert(argc > 1); |
} |