DCHECK: Reference condition parameter in release builds

So that caller's won't get warnings about unused variables for
variables that are only used in calls to DCHECK, such as

  int x = ...
  DCHECK_EQ(x, 17);

R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/31169004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7858 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/base/checks.h b/webrtc/base/checks.h
index a25d808..d2cc324 100644
--- a/webrtc/base/checks.h
+++ b/webrtc/base/checks.h
@@ -71,10 +71,12 @@
 #define LAZY_STREAM(stream, condition)                                        \
   !(condition) ? static_cast<void>(0) : rtc::FatalMessageVoidify() & (stream)
 
-// The actual stream used isn't important.
-#define EAT_STREAM_PARAMETERS                                           \
-  true ? static_cast<void>(0)                                           \
-       : rtc::FatalMessageVoidify() & rtc::FatalMessage("", 0).stream()
+// The actual stream used isn't important. We reference condition in the code
+// but don't evaluate it; this is to avoid "unused variable" warnings.
+#define EAT_STREAM_PARAMETERS(condition) \
+  true || (condition)                    \
+      ? static_cast<void>(0)             \
+      : rtc::FatalMessageVoidify() & rtc::FatalMessage("", 0).stream()
 
 // CHECK dies with a fatal error if condition is not true.  It is *not*
 // controlled by NDEBUG, so the check will be executed regardless of
@@ -159,8 +161,9 @@
 #define CHECK_GE(val1, val2) CHECK_OP(GE, >=, val1, val2)
 #define CHECK_GT(val1, val2) CHECK_OP(GT, > , val1, val2)
 
-// The DCHECK macro is equivalent to CHECK except that it only generates code in
-// debug builds.
+// The DCHECK macro is equivalent to CHECK except that it only generates code
+// in debug builds. It does reference the condition parameter in all cases,
+// though, so callers won't risk getting warnings about unused variables.
 #if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON))
 #define DCHECK(condition) CHECK(condition)
 #define DCHECK_EQ(v1, v2) CHECK_EQ(v1, v2)
@@ -170,13 +173,13 @@
 #define DCHECK_GE(v1, v2) CHECK_GE(v1, v2)
 #define DCHECK_GT(v1, v2) CHECK_GT(v1, v2)
 #else
-#define DCHECK(condition) EAT_STREAM_PARAMETERS
-#define DCHECK_EQ(v1, v2) EAT_STREAM_PARAMETERS
-#define DCHECK_NE(v1, v2) EAT_STREAM_PARAMETERS
-#define DCHECK_LE(v1, v2) EAT_STREAM_PARAMETERS
-#define DCHECK_LT(v1, v2) EAT_STREAM_PARAMETERS
-#define DCHECK_GE(v1, v2) EAT_STREAM_PARAMETERS
-#define DCHECK_GT(v1, v2) EAT_STREAM_PARAMETERS
+#define DCHECK(condition) EAT_STREAM_PARAMETERS(condition)
+#define DCHECK_EQ(v1, v2) EAT_STREAM_PARAMETERS((v1) == (v2))
+#define DCHECK_NE(v1, v2) EAT_STREAM_PARAMETERS((v1) != (v2))
+#define DCHECK_LE(v1, v2) EAT_STREAM_PARAMETERS((v1) <= (v2))
+#define DCHECK_LT(v1, v2) EAT_STREAM_PARAMETERS((v1) < (v2))
+#define DCHECK_GE(v1, v2) EAT_STREAM_PARAMETERS((v1) >= (v2))
+#define DCHECK_GT(v1, v2) EAT_STREAM_PARAMETERS((v1) > (v2))
 #endif
 
 // This is identical to LogMessageVoidify but in name.
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc
index 78d1050..4dcef3b 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc
+++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc
@@ -60,7 +60,7 @@
                                       EncodedInfo* info) {
   const size_t expected_output_len =
       num_10ms_frames_per_packet_ == 2 ? 38 : 50;
-  CHECK_GE(max_encoded_bytes, expected_output_len);
+  DCHECK_GE(max_encoded_bytes, expected_output_len);
 
   // Save timestamp if starting a new packet.
   if (num_10ms_frames_buffered_ == 0)