| Index: base/logging.h
|
| diff --git a/base/logging.h b/base/logging.h
|
| index d33d678cb09958ee790bcff98be0f02da9f25044..e1b088c44afe3282aa9de1cc4d814e0426f42af0 100644
|
| --- a/base/logging.h
|
| +++ b/base/logging.h
|
| @@ -316,6 +316,10 @@ const LogSeverity LOG_DFATAL = LOG_FATAL;
|
| // Needed for LOG_IS_ON(ERROR).
|
| const LogSeverity LOG_0 = LOG_ERROR;
|
|
|
| +// As special cases, we can assume that LOG_IS_ON(ERROR_REPORT) and
|
| +// LOG_IS_ON(FATAL) always hold. Also, LOG_IS_ON(DFATAL) always holds
|
| +// in debug mode. In particular, CHECK()s will always fire if they
|
| +// fail.
|
| #define LOG_IS_ON(severity) \
|
| ((::logging::LOG_ ## severity) >= ::logging::GetMinLogLevel())
|
|
|
| @@ -398,9 +402,6 @@ const LogSeverity LOG_0 = LOG_ERROR;
|
| //
|
| // We make sure CHECK et al. always evaluates their arguments, as
|
| // doing CHECK(FunctionWithSideEffect()) is a common idiom.
|
| -//
|
| -// TODO(akalin): Fix the problem where if the min log level is >
|
| -// FATAL, CHECK() et al. won't terminate the program.
|
| #define CHECK(condition) \
|
| LAZY_STREAM(LOG_STREAM(FATAL), !(condition)) \
|
| << "Check failed: " #condition ". "
|
| @@ -577,7 +578,9 @@ enum { DEBUG_MODE = ENABLE_DLOG };
|
|
|
| #if defined(NDEBUG)
|
|
|
| -#define DCHECK_SEVERITY ERROR_REPORT
|
| +#define COMPACT_GOOGLE_LOG_EX_DCHECK(ClassName, ...) \
|
| + COMPACT_GOOGLE_LOG_EX_ERROR_REPORT(ClassName , ##__VA_ARGS__)
|
| +#define COMPACT_GOOGLE_LOG_DCHECK COMPACT_GOOGLE_LOG_ERROR_REPORT
|
| const LogSeverity LOG_DCHECK = LOG_ERROR_REPORT;
|
| // This is set to true in InitLogging when we want to enable the
|
| // DCHECKs in release.
|
| @@ -587,41 +590,38 @@ extern bool g_enable_dcheck;
|
| #else // defined(NDEBUG)
|
|
|
| // On a regular debug build, we want to have DCHECKs enabled.
|
| -#define DCHECK_SEVERITY FATAL
|
| +#define COMPACT_GOOGLE_LOG_EX_DCHECK(ClassName, ...) \
|
| + COMPACT_GOOGLE_LOG_EX_FATAL(ClassName , ##__VA_ARGS__)
|
| +#define COMPACT_GOOGLE_LOG_DCHECK COMPACT_GOOGLE_LOG_FATAL
|
| const LogSeverity LOG_DCHECK = LOG_FATAL;
|
| -// TODO(akalin): We don't define this as 'true' since if the log level
|
| -// is above FATAL, the DCHECK won't go through anyway. Make it so
|
| -// that DCHECKs work regardless of the logging level, then set this to
|
| -// 'true'.
|
| -#define DCHECK_IS_ON() LOG_IS_ON(DCHECK)
|
| +#define DCHECK_IS_ON() true
|
|
|
| #endif // defined(NDEBUG)
|
|
|
| #else // ENABLE_DCHECK
|
|
|
| -#define DCHECK_SEVERITY FATAL
|
| -const LogSeverity LOG_DCHECK = LOG_FATAL;
|
| +// These are just dummy values since DCHECK_IS_ON() is always false in
|
| +// this case.
|
| +#define COMPACT_GOOGLE_LOG_EX_DCHECK(ClassName, ...) \
|
| + COMPACT_GOOGLE_LOG_EX_INFO(ClassName , ##__VA_ARGS__)
|
| +#define COMPACT_GOOGLE_LOG_DCHECK COMPACT_GOOGLE_LOG_INFO
|
| +const LogSeverity LOG_DCHECK = LOG_INFO;
|
| #define DCHECK_IS_ON() false
|
|
|
| #endif // ENABLE_DCHECK
|
| #undef ENABLE_DCHECK
|
|
|
| -// Unlike CHECK et al., DCHECK et al. *does* evaluate their arguments
|
| -// lazily.
|
| -
|
| -// DCHECK et al. also make sure to reference |condition| regardless of
|
| +// DCHECK et al. make sure to reference |condition| regardless of
|
| // whether DCHECKs are enabled; this is so that we don't get unused
|
| // variable warnings if the only use of a variable is in a DCHECK.
|
| // This behavior is different from DLOG_IF et al.
|
|
|
| -#define DCHECK(condition) \
|
| - !DCHECK_IS_ON() ? (void) 0 : \
|
| - LOG_IF(DCHECK_SEVERITY, !(condition)) \
|
| +#define DCHECK(condition) \
|
| + LAZY_STREAM(LOG_STREAM(DCHECK), DCHECK_IS_ON() && !(condition)) \
|
| << "Check failed: " #condition ". "
|
|
|
| -#define DPCHECK(condition) \
|
| - !DCHECK_IS_ON() ? (void) 0 : \
|
| - PLOG_IF(DCHECK_SEVERITY, !(condition)) \
|
| +#define DPCHECK(condition) \
|
| + LAZY_STREAM(PLOG_STREAM(DCHECK), DCHECK_IS_ON() && !(condition)) \
|
| << "Check failed: " #condition ". "
|
|
|
| // Helper macro for binary operators.
|
| @@ -635,9 +635,10 @@ const LogSeverity LOG_DCHECK = LOG_FATAL;
|
| __FILE__, __LINE__, ::logging::LOG_DCHECK, \
|
| _result).stream()
|
|
|
| -// Equality/Inequality checks - compare two values, and log a LOG_FATAL message
|
| -// including the two values when the result is not as expected. The values
|
| -// must have operator<<(ostream, ...) defined.
|
| +// Equality/Inequality checks - compare two values, and log a
|
| +// LOG_DCHECK message including the two values when the result is not
|
| +// as expected. The values must have operator<<(ostream, ...)
|
| +// defined.
|
| //
|
| // You may append to the error message like so:
|
| // DCHECK_NE(1, 2) << ": The world must be ending!";
|
|
|