| // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | // 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. 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); | 
 | } | 
 |  | 
 | int main(int argc, const char* argv[]) { | 
 |   DoCheck(argc > 1); | 
 |   DoCheckEq(argc, 1); | 
 |   DoBlinkReleaseAssert(argc > 1); | 
 | } |