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