37 lines
634 B
C
37 lines
634 B
C
/* Undefined behavior from a call to va_arg with a type other than
|
|
that of the argument passed (in particular, with a type such as
|
|
"float" that can never be the type of an argument passed through
|
|
"...") does not appear until after the va_list expression is
|
|
evaluated. PR 38483. */
|
|
/* Origin: Joseph Myers <joseph@codesourcery.com> */
|
|
|
|
#include <stdarg.h>
|
|
|
|
extern void exit (int);
|
|
extern void abort (void);
|
|
|
|
va_list ap;
|
|
float f;
|
|
|
|
va_list *
|
|
foo (void)
|
|
{
|
|
exit (0);
|
|
return ≈
|
|
}
|
|
|
|
void
|
|
bar (int i, ...)
|
|
{
|
|
va_start (ap, i);
|
|
f = va_arg (*foo (), float);
|
|
va_end (ap);
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
bar (1, 0);
|
|
abort ();
|
|
}
|