blob: af7e9c4ed941849f906474cd0ad601dcad40035f [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O2 -std=c99" } */
int puts(const char *);
int snprintf(char *, unsigned long, const char *, ...);
unsigned long strspn(const char *, const char *);
struct TValue {
union {
long long i;
double n;
} value_;
unsigned char tt_;
};
static int tostringbuff (struct TValue *num, char *str) {
int len;
if (num->tt_ == 3) {
len = snprintf(str,50,"%lld",num->value_.i);
} else {
len = snprintf(str,50,"%.14g",num->value_.n);
if (str[strspn(str, "-0123456789")] == '\0') {
str[len++] = '.';
str[len++] = '0';
}
}
return len;
}
void unused (int *buff, struct TValue *num) {
char junk[50];
*buff += tostringbuff(num, junk);
}
char space[400];
void addnum2buff (int *buff, struct TValue *num) __attribute__((__noinline__));
void addnum2buff (int *buff, struct TValue *num) {
*buff += tostringbuff(num, space);
}
int __attribute__((noipa)) check_space (char *s)
{
return (s[0] == '1' && s[1] == '.' && s[2] =='0' && s[3] == '\0');
}
int main(void) {
int buff = 0;
struct TValue num;
num.value_.n = 1.0;
num.tt_ = 19;
addnum2buff(&buff, &num);
if (!check_space(space))
__builtin_abort ();
return 0;
}