Message ID | 20210513201519.334441-1-aldyh@redhat.com |
---|---|
State | New |
Headers | show |
Series | Bail in bounds_of_var_in_loop if scev returns NULL. | expand |
On 5/13/21 4:15 PM, Aldy Hernandez via Gcc-patches wrote: > Both initial_condition_in_loop_num and evolution_part_in_loop_num > can return NULL. This patch exits if either one is NULL. Presumably > this didn't happen before, because adjust_range_with_scev was called > far less frequently than in ranger, which can call it for every PHI. > > OK pending tests? > > gcc/ChangeLog: > > PR tree-optimization/100349 > * vr-values.c (bounds_of_var_in_loop): Bail if scev returns > NULL. > > gcc/testsuite/ChangeLog: > > * gcc.dg/pr100349.c: New test. > - OK. Andrew
diff --git a/gcc/testsuite/gcc.dg/pr100349.c b/gcc/testsuite/gcc.dg/pr100349.c new file mode 100644 index 00000000000..dd7977ac0f9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr100349.c @@ -0,0 +1,16 @@ +// { dg-do compile } +// { dg-options "-O2 -w" } + +#include <stdint.h> +uint8_t a; +b(int8_t c) { + int d; +e: + uint32_t f; + for (;;) + for (c = 10; c; c++) + if (0 > (a = c) ?: d) { + f = a; + goto e; + } +} diff --git a/gcc/vr-values.c b/gcc/vr-values.c index 08b237b2632..b1bf53af9e0 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -1650,6 +1650,9 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query, init = initial_condition_in_loop_num (chrec, loop->num); step = evolution_part_in_loop_num (chrec, loop->num); + if (!init || !step) + return false; + /* If INIT is an SSA with a singleton range, set INIT to said singleton, otherwise leave INIT alone. */ if (TREE_CODE (init) == SSA_NAME)