| Index: base/logging.h
|
| diff --git a/base/logging.h b/base/logging.h
|
| index 7854e3934e974b4670930d6855f3ab8699a8376f..07e2a02e2d256a7027f6cf84614cea323eae2f5f 100644
|
| --- a/base/logging.h
|
| +++ b/base/logging.h
|
| @@ -726,7 +726,27 @@ const LogSeverity LOG_DCHECK = LOG_INFO;
|
| LAZY_STREAM(PLOG_STREAM(DCHECK), false) \
|
| << "Check failed: " #condition ". "
|
|
|
| -#else // _PREFAST_
|
| +#elif defined(__clang_analyzer__)
|
| +
|
| +// Keeps the static analyzer from proceeding along the current codepath,
|
| +// otherwise false positive errors may be generated by null pointer checks.
|
| +inline constexpr bool AnalyzerNoReturn() __attribute__((analyzer_noreturn)) {
|
| + return false;
|
| +}
|
| +
|
| +#define DCHECK(condition) \
|
| + LAZY_STREAM( \
|
| + LOG_STREAM(DCHECK), \
|
| + DCHECK_IS_ON() ? (logging::AnalyzerNoReturn(), !(condition)) : false) \
|
| + << "Check failed: " #condition ". "
|
| +
|
| +#define DPCHECK(condition) \
|
| + LAZY_STREAM( \
|
| + PLOG_STREAM(DCHECK), \
|
| + DCHECK_IS_ON() ? (logging::AnalyzerNoReturn(), !(condition)) : false) \
|
| + << "Check failed: " #condition ". "
|
| +
|
| +#else
|
|
|
| #define DCHECK(condition) \
|
| LAZY_STREAM(LOG_STREAM(DCHECK), DCHECK_IS_ON() ? !(condition) : false) \
|
| @@ -736,7 +756,7 @@ const LogSeverity LOG_DCHECK = LOG_INFO;
|
| LAZY_STREAM(PLOG_STREAM(DCHECK), DCHECK_IS_ON() ? !(condition) : false) \
|
| << "Check failed: " #condition ". "
|
|
|
| -#endif // _PREFAST_
|
| +#endif
|
|
|
| // Helper macro for binary operators.
|
| // Don't use this macro directly in your code, use DCHECK_EQ et al below.
|
|
|