Hi Eric, Hi Richard,
A customer has reported the following bug with the MIPS target. Since
it is for a GNU extension to the C language (zero-length arrays) that
is being used in a non-intended fashion (the zero-length array is in a
structure with no other fields) I doubt if you will want to
investigate the problem too much, but I thought that it was worth
reporting anyway:
% mips64vr-elf-gcc -mgp32 -O2 -Tddb.ld -march=vr5500 bug.c
% mips64vr-elf-run a.out
assertion "arg4 == va4" failed: file "bug.c", line 40, function: foo
As an aside if the type3 structure in bug.c is given another,
non-zero-length field, then the test passes.
Cheers
Nick
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
typedef int * type1;
typedef struct
{
union u1 { double f1; long int f2; } f3[0];
} type3;
typedef int type4;
static type1 arg1 = 0;
static double arg2 = 1.0;
static type3 arg3 = {{}};
static type4 arg4 = 0x12345678;
void
foo (double parm,
...)
{
va_list ap;
type1 va1;
double va2;
type3 va3;
type4 va4;
va_start (ap, parm);
va1 = va_arg (ap, type1);
assert (arg1 == va1);
va2 = va_arg (ap, double);
assert (arg2 == va2);
va3 = va_arg (ap, type3);
va4 = va_arg (ap, type4);
assert (arg4 == va4);
va_end (ap);
}
int
main (void)
{
foo (1.0, arg1, arg2, arg3, arg4);
return 0;
}