| // 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); | |
| } |