| Index: base/logging.h
|
| diff --git a/base/logging.h b/base/logging.h
|
| index 88d5efffa8f049f9bb3db28d013522ba2345e366..54ff57970abe2b5a63507ce77e11f5ae698ef457 100644
|
| --- a/base/logging.h
|
| +++ b/base/logging.h
|
| @@ -450,14 +450,36 @@ const LogSeverity LOG_0 = LOG_ERROR;
|
|
|
| #else
|
|
|
| +#if defined(_PREFAST_) && defined(OS_WIN)
|
| +// 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_
|
| +
|
| #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.
|
|
|
| +#if defined(_PREFAST_) && defined(OS_WIN)
|
| +// See comments on the previous use of __analysis_assume.
|
| +
|
| +#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) \
|
|
|