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

Reply via email to