1 /* PR 79800 - wrong snprintf result range with precision in a narrow 2 negative-positive range 3 { dg-do "run" { target c99_runtime } } 4 { dg-options "-O2 -Wall" } */ 5 6 #define FMT "%.*a" 7 char fmt[] = FMT; 8 9 volatile double x = 1.23456789; 10 f(int p)11void f (int p) 12 { 13 if (p < -1 || 0 < p) 14 p = -1; 15 16 char d[30]; 17 int n1 = __builtin_sprintf (d, "%.*a", p, x); 18 const char *s = n1 < 20 ? "< 20" : ">= 20"; 19 20 if (__builtin_strcmp (s, ">= 20")) 21 __builtin_abort (); 22 } 23 24 volatile int i = -1; 25 main()26int main () 27 { 28 f (i); 29 30 return 0; 31 } 32