On Wed, Jun 04, 2014 at 10:56:43PM +0200, Marek Polacek wrote:
> +/* Warn about logical not used on the left hand side operand of a comparison.
> + This function assumes that the LHS is inside of TRUTH_NOT_EXPR.
> + Do not warn if the LHS or RHS is of a boolean or a vector type. */
> +
> +void
> +warn_logical_not_parentheses (location_t location, enum tree_code code,
> + tree lhs, tree rhs)
> +{
> + if (TREE_TYPE (lhs) == NULL_TREE
> + || TREE_TYPE (rhs) == NULL_TREE)
> + ;
> + else if (TREE_CODE_CLASS (code) != tcc_comparison
Shouldn't this test be done first? I mean, if type is NULL on lhs or rhs,
you'll warn even when code is not comparison...
> + || TREE_CODE (TREE_TYPE (lhs)) == BOOLEAN_TYPE
> + || TREE_CODE (TREE_TYPE (rhs)) == BOOLEAN_TYPE
> + || VECTOR_TYPE_P (TREE_TYPE (lhs))
> + || VECTOR_TYPE_P (TREE_TYPE (rhs)))
> + return;
> +
> + warning_at (location, OPT_Wlogical_not_parentheses,
> + "logical not is only applied to the left hand side of "
> + "comparison");
> +}
>
Jakub