On Mon, Dec 4, 2017 at 6:55 AM, Jeff Law <l...@redhat.com> wrote:
>
> As I brought my patches for pr78496 up to the tip of the trunk I noticed
> a couple testsuite regressions with -fsanitize=unreachable tests.
>
> The problem is VRP and EVRP analysis/optimization could exploit
> __builtin_unreachable to narrow the range of an object, then use that
> narrowed range to eliminate the __builtin_unreachable.  That seems
> fundamentally wrong if we're compiling with -fsanitize=unreachable.
>
> So this patch changes both to not exploit __builtin_unreachable when
> -fsanitize=unreachable.
>
> Bootstrapped and regression tested with all three patches in this kit.
>
> OK for the trunk?

Jakub already fixed this in sligthly different ways.

Richard.

> Jeff
>
>         * gimple-ssa-evrp-analyze.c
>         (evrp_range_analyzer::record_ranges_from_incoming_edge): Do not
>         exploit __builtin_unreachable for -fsanitize=unreachable.
>         * tree-vrp.c (remove_range_assertions): Similarly.
>
>
> diff --git a/gcc/gimple-ssa-evrp-analyze.c b/gcc/gimple-ssa-evrp-analyze.c
> index fb3d329..3cdf271 100644
> --- a/gcc/gimple-ssa-evrp-analyze.c
> +++ b/gcc/gimple-ssa-evrp-analyze.c
> @@ -193,7 +193,8 @@ evrp_range_analyzer::record_ranges_from_incoming_edge 
> (basic_block bb)
>
>           /* If pred_e is really a fallthru we can record value ranges
>              in SSA names as well.  */
> -         bool is_fallthru = assert_unreachable_fallthru_edge_p (pred_e);
> +         bool is_fallthru = (assert_unreachable_fallthru_edge_p (pred_e)
> +                             && (flag_sanitize & SANITIZE_UNREACHABLE) == 0);
>
>           /* Push updated ranges only after finding all of them to avoid
>              ordering issues that can lead to worse ranges.  */
> diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
> index a86b382..d0435a0 100644
> --- a/gcc/tree-vrp.c
> +++ b/gcc/tree-vrp.c
> @@ -5181,7 +5181,8 @@ remove_range_assertions (void)
>                     is_unreachable = 0;
>                     if (single_pred_p (bb)
>                         && assert_unreachable_fallthru_edge_p
> -                                                   (single_pred_edge (bb)))
> +                                                   (single_pred_edge (bb))
> +                       && (flag_sanitize & SANITIZE_UNREACHABLE) == 0)
>                       is_unreachable = 1;
>                   }
>                 /* Handle
>

Reply via email to