| /* 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" } |
| } |