https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113907
--- Comment #40 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Jan Hubicka from comment #39) > This testcase > #include <stdio.h> > int data[100]; > > __attribute__((noinline)) > int bar (int d, unsigned int d2) > { > if (d2 > 10) > printf ("Bingo\n"); > return d + d2; > } So, while d2 should have [17, 27] range when called from test2 and [17, 117] from test, I don't see anything that would limit ranges of data[?], it can be anything (say some global constructor modifying the data array). So bar has to return VARYING.