On 05/24/2014 04:00 AM, Marek Polacek wrote:
+         /* Warn if the condition has boolean value.  */
+         tree e = cond;
+         while (TREE_CODE (e) == COMPOUND_EXPR)
+           e = TREE_OPERAND (e, 1);
+
+         if (TREE_CODE (orig_type) == BOOLEAN_TYPE
+             || (truth_value_p (TREE_CODE (e))
+                 && TREE_CODE (orig_type) != INTEGER_TYPE))
+           warning_at (input_location, OPT_Wswitch_bool,
+                       "switch condition has boolean value");

For C++ it should be "type bool", not "boolean value". And it should be enough to just check for BOOLEAN_TYPE, without looking through COMPOUND_EXPR.

2) Since the warning is now enabled even for the C++ FE, it's
   exercised during bootstrap.  Turned out that gengtype generates
   code like
   switch (TREE_CODE (...) == INTEGER_TYPE) { ... }
   that would mar the bootstrap - so I tweaked it to generate
   switch ((int) (TREE_CODE (...) == INTEGER_TYPE) { ... })
   instead.  Does that make sense?

Makes sense to me.

Jason

Reply via email to