On Wed, Sep 18, 2013 at 03:10:42PM +0200, Marek Polacek wrote:
> --- gcc/cp/typeck.c.mp        2013-09-18 14:00:14.303869196 +0200
> +++ gcc/cp/typeck.c   2013-09-18 14:08:21.287770112 +0200
> @@ -4884,7 +4884,7 @@ cp_build_binary_op (location_t location,
>    if (build_type == NULL_TREE)
>      build_type = result_type;
>  
> -  if ((flag_sanitize & SANITIZE_UNDEFINED)
> +  if ((flag_sanitize & SANITIZE_SHIFT || flag_sanitize & SANITIZE_DIVIDE)

I'd suggest to use
    if ((flag & (SANITIZE_SHIFT | SANITIZE_DIVIDE))
instead.

>        && !processing_template_decl
>        && current_function_decl != 0
>        && !lookup_attribute ("no_sanitize_undefined",
> @@ -4898,7 +4898,7 @@ cp_build_binary_op (location_t location,
>                                                                 tf_none));
>        op1 = maybe_constant_value (fold_non_dependent_expr_sfinae (op1,
>                                                                 tf_none));
> -      if (doing_div_or_mod)
> +      if (doing_div_or_mod && flag_sanitize & SANITIZE_DIVIDE)

And, while the operator precedence is right, I think it would be better
to use if (doing_div_or_mod && (flag_sanitize & SANITIZE_DIVIDE))

        Jakub

Reply via email to