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