| /* PR 79800 - wrong snprintf result range with precision in a narrow | |
| negative-positive range | |
| { dg-do "run" { target c99_runtime } } | |
| { dg-options "-O2 -Wall" } */ | |
| #define FMT "%.*a" | |
| char fmt[] = FMT; | |
| volatile double x = 1.23456789; | |
| void f (int p) | |
| { | |
| if (p < -1 || 0 < p) | |
| p = -1; | |
| char d[30]; | |
| int n1 = __builtin_sprintf (d, "%.*a", p, x); | |
| const char *s = n1 < 20 ? "< 20" : ">= 20"; | |
| if (__builtin_strcmp (s, ">= 20")) | |
| __builtin_abort (); | |
| } | |
| volatile int i = -1; | |
| int main () | |
| { | |
| f (i); | |
| return 0; | |
| } |