Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 #include "wtf/build_config.h" | 42 #include "wtf/build_config.h" |
| 43 #include <stdarg.h> | 43 #include <stdarg.h> |
| 44 | 44 |
| 45 #if OS(WIN) | 45 #if OS(WIN) |
| 46 #include <windows.h> | 46 #include <windows.h> |
| 47 #endif | 47 #endif |
| 48 | 48 |
| 49 // Users must test "#if ENABLE(ASSERT)", which helps ensure that code | 49 // Users must test "#if ENABLE(ASSERT)", which helps ensure that code |
| 50 // testing this macro has included this header. | 50 // testing this macro has included this header. |
| 51 #ifndef ENABLE_ASSERT | 51 #ifndef ENABLE_ASSERT |
| 52 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) | 52 #define ENABLE_ASSERT DCHECK_IS_ON() |
| 53 /* Disable ASSERT* macros in release mode by default. */ | |
| 54 #define ENABLE_ASSERT 0 | |
| 55 #else | |
| 56 #define ENABLE_ASSERT 1 | |
| 57 #endif /* defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) */ | |
| 58 #endif | 53 #endif |
| 59 | 54 |
| 60 #ifndef LOG_DISABLED | 55 #ifndef LOG_DISABLED |
| 61 #define LOG_DISABLED !ENABLE(ASSERT) | 56 #define LOG_DISABLED !ENABLE(ASSERT) |
| 62 #endif | 57 #endif |
| 63 | 58 |
| 64 // These helper functions are always declared, but not necessarily always | 59 // These helper functions are always declared, but not necessarily always |
| 65 // defined if the corresponding function is disabled. | 60 // defined if the corresponding function is disabled. |
| 66 | 61 |
| 67 WTF_EXPORT void WTFReportAssertionFailure(const char* file, | 62 WTF_EXPORT void WTFReportAssertionFailure(const char* file, |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 150 // Expressions inside them are evaluated in debug builds only. | 145 // Expressions inside them are evaluated in debug builds only. |
| 151 // They are deprecated. We should use: | 146 // They are deprecated. We should use: |
| 152 // - DCHECK() for ASSERT() | 147 // - DCHECK() for ASSERT() |
| 153 // - NOTREACHED() for ASSERT_NOT_REACHED() | 148 // - NOTREACHED() for ASSERT_NOT_REACHED() |
| 154 #if OS(WIN) | 149 #if OS(WIN) |
| 155 // FIXME: Change to use something other than ASSERT to avoid this conflict with | 150 // FIXME: Change to use something other than ASSERT to avoid this conflict with |
| 156 // the underlying platform. | 151 // the underlying platform. |
| 157 #undef ASSERT | 152 #undef ASSERT |
| 158 #endif | 153 #endif |
| 159 | 154 |
| 155 // If DCHECK is configured to dump-without-crashing then enable assertions, | |
| 156 // but also configure them to dump-without-crashing. | |
| 157 #if defined(DCHECK_IS_DUMP_WITHOUT_CRASH) | |
| 158 | |
| 159 #define ASSERT(assertion) DCHECK(assertion) | |
| 160 #define ASSERT_NOT_REACHED() NOTREACHED() | |
|
Wez
2016/12/19 23:57:46
Note that this has significant performance implica
esprehn
2016/12/20 03:16:29
What was the perf change? Not sure I understand ho
Wez
2017/01/07 00:18:47
Earlier versions of the patch left Blink assertion
| |
| 161 | |
| 162 // |file| and |line| won't actually be logged, but must be referenced. | |
| 163 #define DCHECK_AT(assertion, file, line) DCHECK(assertion) << file << line | |
| 164 | |
| 165 #else // defined(DCHECK_IS_DUMP_WITHOUT_CRASH) | |
| 166 | |
| 160 #define DCHECK_AT(assertion, file, line) \ | 167 #define DCHECK_AT(assertion, file, line) \ |
| 161 LAZY_STREAM(logging::LogMessage(file, line, #assertion).stream(), \ | 168 LAZY_STREAM(logging::LogMessage(file, line, #assertion).stream(), \ |
| 162 DCHECK_IS_ON() ? !(assertion) : false) | 169 DCHECK_IS_ON() ? !(assertion) : false) |
| 163 | 170 |
| 164 #if ENABLE(ASSERT) | 171 #if ENABLE(ASSERT) |
| 165 | 172 |
| 166 #define ASSERT(assertion) \ | 173 #define ASSERT(assertion) \ |
| 167 (!(assertion) ? (WTFReportAssertionFailure(__FILE__, __LINE__, \ | 174 (!(assertion) ? (WTFReportAssertionFailure(__FILE__, __LINE__, \ |
| 168 WTF_PRETTY_FUNCTION, #assertion), \ | 175 WTF_PRETTY_FUNCTION, #assertion), \ |
| 169 CRASH()) \ | 176 CRASH()) \ |
| 170 : (void)0) | 177 : (void)0) |
| 171 | 178 |
| 172 #define ASSERT_NOT_REACHED() \ | 179 #define ASSERT_NOT_REACHED() \ |
| 173 do { \ | 180 do { \ |
| 174 WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, 0); \ | 181 WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, 0); \ |
| 175 CRASH(); \ | 182 CRASH(); \ |
| 176 } while (0) | 183 } while (0) |
| 177 | 184 |
| 178 #else | 185 #else |
| 179 | 186 |
| 180 #define ASSERT(assertion) ((void)0) | 187 #define ASSERT(assertion) ((void)0) |
| 181 #define ASSERT_NOT_REACHED() ((void)0) | 188 #define ASSERT_NOT_REACHED() ((void)0) |
| 182 | 189 |
| 183 #endif | 190 #endif |
| 184 | 191 |
| 192 #endif // defined(DCHECK_ALWAYS_ON) | |
| 193 | |
| 185 // Users must test "#if ENABLE(SECURITY_ASSERT)", which helps ensure | 194 // Users must test "#if ENABLE(SECURITY_ASSERT)", which helps ensure |
| 186 // that code testing this macro has included this header. | 195 // that code testing this macro has included this header. |
| 187 #if defined(ADDRESS_SANITIZER) || ENABLE(ASSERT) | 196 #if defined(ADDRESS_SANITIZER) || ENABLE(ASSERT) |
| 188 #define ENABLE_SECURITY_ASSERT 1 | 197 #define ENABLE_SECURITY_ASSERT 1 |
| 189 #else | 198 #else |
| 190 #define ENABLE_SECURITY_ASSERT 0 | 199 #define ENABLE_SECURITY_ASSERT 0 |
| 191 #endif | 200 #endif |
| 192 | 201 |
| 193 // SECURITY_DCHECK and SECURITY_CHECK | 202 // SECURITY_DCHECK and SECURITY_CHECK |
| 194 // Use in places where failure of the assertion indicates a possible security | 203 // Use in places where failure of the assertion indicates a possible security |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 292 return static_cast<thisType&>(argument); \ | 301 return static_cast<thisType&>(argument); \ |
| 293 } \ | 302 } \ |
| 294 inline const thisType& to##thisType##OrDie(const argumentType& argument) { \ | 303 inline const thisType& to##thisType##OrDie(const argumentType& argument) { \ |
| 295 CHECK(referencePredicate); \ | 304 CHECK(referencePredicate); \ |
| 296 return static_cast<const thisType&>(argument); \ | 305 return static_cast<const thisType&>(argument); \ |
| 297 } \ | 306 } \ |
| 298 void to##thisType##OrDie(const thisType*); \ | 307 void to##thisType##OrDie(const thisType*); \ |
| 299 void to##thisType##OrDie(const thisType&) | 308 void to##thisType##OrDie(const thisType&) |
| 300 | 309 |
| 301 #endif // WTF_Assertions_h | 310 #endif // WTF_Assertions_h |
| OLD | NEW |