1 // Copyright 2011 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file is meant for analyzing the code generated by the CHECK 6 // macros in a small executable file that's easy to disassemble. 7 8 #include <ostream> 9 10 #include "base/check_op.h" 11 #include "base/compiler_specific.h" 12 13 // An official build shouldn't generate code to print out messages for 14 // the CHECK* macros, nor should it have the strings in the 15 // executable. It is also important that the CHECK() function collapse to the 16 // same implementation as RELEASE_ASSERT(), in particular on Windows x86. 17 // Historically, the stream eating caused additional unnecessary instructions. 18 // See https://crbug.com/672699. 19 20 #define BLINK_RELEASE_ASSERT_EQUIVALENT(assertion) \ 21 if (!(assertion)) [[unlikely]] { \ 22 base::ImmediateCrash(); \ 23 } 24 DoCheck(bool b)25void DoCheck(bool b) { 26 CHECK(b) << "DoCheck " << b; 27 } 28 DoBlinkReleaseAssert(bool b)29void DoBlinkReleaseAssert(bool b) { 30 BLINK_RELEASE_ASSERT_EQUIVALENT(b); 31 } 32 DoCheckEq(int x,int y)33void DoCheckEq(int x, int y) { 34 CHECK_EQ(x, y); 35 } 36 main(int argc,const char * argv[])37int main(int argc, const char* argv[]) { 38 DoCheck(argc > 1); 39 DoCheckEq(argc, 1); 40 DoBlinkReleaseAssert(argc > 1); 41 } 42