/* Verify that -Wformat-overflow uses context-sensitive ranges even at -O0 to avoid both false positives and negatives. { dg-do compile } { dg-options "-O0 -Wall" } */ extern int sprintf (char*, const char*, ...); extern char a[4]; void test_context_range (int c) { int i = 998; /* Prior to the switch to Ranger in GCC 12 -Wformat-overflow triggers for both calls because EVRP doesn't expose the accurate range of the argument. */ if (c) sprintf (a, "%i", i + 2); // { dg-warning "writing a terminating nul past the end of the destination" } else sprintf (a, "%i", i + 1); // { dg-bogus "-Wformat-overflow" } }