URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 297 |
Rev 338 |
/* PR c/3711
|
/* PR c/3711
|
This testcase ICEd on IA-32 at -O0 and was miscompiled otherwise,
|
This testcase ICEd on IA-32 at -O0 and was miscompiled otherwise,
|
because std_expand_builtin_va_arg didn't handle variable size types. */
|
because std_expand_builtin_va_arg didn't handle variable size types. */
|
|
|
#include <stdarg.h>
|
#include <stdarg.h>
|
|
|
extern void abort (void);
|
extern void abort (void);
|
extern void exit (int);
|
extern void exit (int);
|
|
|
void bar (int c)
|
void bar (int c)
|
{
|
{
|
static int d = '0';
|
static int d = '0';
|
|
|
if (c != d++)
|
if (c != d++)
|
abort ();
|
abort ();
|
if (c < '0' || c > '9')
|
if (c < '0' || c > '9')
|
abort ();
|
abort ();
|
}
|
}
|
|
|
void foo (int size, ...)
|
void foo (int size, ...)
|
{
|
{
|
struct
|
struct
|
{
|
{
|
char x[size];
|
char x[size];
|
} d;
|
} d;
|
va_list ap;
|
va_list ap;
|
int i;
|
int i;
|
|
|
va_start (ap, size);
|
va_start (ap, size);
|
d = va_arg (ap, typeof (d));
|
d = va_arg (ap, typeof (d));
|
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
bar (d.x[i]);
|
bar (d.x[i]);
|
d = va_arg (ap, typeof (d));
|
d = va_arg (ap, typeof (d));
|
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
bar (d.x[i]);
|
bar (d.x[i]);
|
va_end (ap);
|
va_end (ap);
|
}
|
}
|
|
|
int main (void)
|
int main (void)
|
{
|
{
|
int z = 5;
|
int z = 5;
|
struct { char a[z]; } x, y;
|
struct { char a[z]; } x, y;
|
|
|
x.a[0] = '0';
|
x.a[0] = '0';
|
x.a[1] = '1';
|
x.a[1] = '1';
|
x.a[2] = '2';
|
x.a[2] = '2';
|
x.a[3] = '3';
|
x.a[3] = '3';
|
x.a[4] = '4';
|
x.a[4] = '4';
|
y.a[0] = '5';
|
y.a[0] = '5';
|
y.a[1] = '6';
|
y.a[1] = '6';
|
y.a[2] = '7';
|
y.a[2] = '7';
|
y.a[3] = '8';
|
y.a[3] = '8';
|
y.a[4] = '9';
|
y.a[4] = '9';
|
foo (z, x, y);
|
foo (z, x, y);
|
exit (0);
|
exit (0);
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.