Chromium Code Reviews| Index: base/logging.h |
| diff --git a/base/logging.h b/base/logging.h |
| index 88d5efffa8f049f9bb3db28d013522ba2345e366..0569ee9e4ed10248a25d4d3cd58475b088938ba8 100644 |
| --- a/base/logging.h |
| +++ b/base/logging.h |
| @@ -450,14 +450,36 @@ const LogSeverity LOG_0 = LOG_ERROR; |
| #else |
| +#ifdef _PREFAST_ |
|
cpu_(ooo_6.6-7.5)
2014/10/23 00:20:53
use #if defined(_PREFAST_)
In case of doubt about
|
| +// Use __analysis_assume to tell the VC++ static analysis engine that |
| +// assert conditions are true, to suppress warnings. The LAZY_STREAM |
| +// parameter doesn't reference 'condition' in /analyze builds because |
| +// this evaluation confuses /analyze. The !! before condition is because |
| +// __analysis_assume gets confused on some conditions: |
| +// http://randomascii.wordpress.com/2011/09/13/analyze-for-visual-studio-the-ugly-part-5/ |
| + |
| +#define CHECK(condition) \ |
| + __analysis_assume(!!(condition)), \ |
| + LAZY_STREAM(LOG_STREAM(FATAL), false) \ |
| + << "Check failed: " #condition ". " |
| + |
| +#define PCHECK(condition) \ |
| + __analysis_assume(!!(condition)), \ |
| + LAZY_STREAM(PLOG_STREAM(FATAL), false) \ |
| + << "Check failed: " #condition ". " |
| + |
| +#else // _PREFAST_ |
|
Lei Zhang
2014/10/23 00:03:17
nit: two spaces before // per style guide.
|
| + |
| #define CHECK(condition) \ |
| LAZY_STREAM(LOG_STREAM(FATAL), !(condition)) \ |
| << "Check failed: " #condition ". " |
| -#define PCHECK(condition) \ |
| +#define PCHECK(condition) \ |
| LAZY_STREAM(PLOG_STREAM(FATAL), !(condition)) \ |
| << "Check failed: " #condition ". " |
| +#endif // _PREFAST_ |
| + |
| // Helper macro for binary operators. |
| // Don't use this macro directly in your code, use CHECK_EQ et al below. |
| // |
| @@ -616,6 +638,21 @@ const LogSeverity LOG_DCHECK = LOG_INFO; |
| // variable warnings if the only use of a variable is in a DCHECK. |
| // This behavior is different from DLOG_IF et al. |
| +#ifdef _PREFAST_ |
| +// See comments on the previous use of __analysis_assume |
|
cpu_(ooo_6.6-7.5)
2014/10/23 00:20:53
period at the end of this comment.
The comments l
|
| + |
| +#define DCHECK(condition) \ |
| + __analysis_assume(!!(condition)), \ |
| + LAZY_STREAM(LOG_STREAM(DCHECK), false) \ |
| + << "Check failed: " #condition ". " |
| + |
| +#define DPCHECK(condition) \ |
| + __analysis_assume(!!(condition)), \ |
| + LAZY_STREAM(PLOG_STREAM(DCHECK), false) \ |
| + << "Check failed: " #condition ". " |
| + |
| +#else // _PREFAST_ |
| + |
| #define DCHECK(condition) \ |
| LAZY_STREAM(LOG_STREAM(DCHECK), DCHECK_IS_ON ? !(condition) : false) \ |
| << "Check failed: " #condition ". " |
| @@ -624,6 +661,8 @@ const LogSeverity LOG_DCHECK = LOG_INFO; |
| LAZY_STREAM(PLOG_STREAM(DCHECK), DCHECK_IS_ON ? !(condition) : false) \ |
| << "Check failed: " #condition ". " |
| +#endif // _PREFAST_ |
| + |
| // Helper macro for binary operators. |
| // Don't use this macro directly in your code, use DCHECK_EQ et al below. |
| #define DCHECK_OP(name, op, val1, val2) \ |