scalar-return-1_main.c: New file.
2003-05-21 Janis Johnson <janis187@us.ibm.com> * gcc.dg/compat/scalar-return-1_main.c: New file. * gcc.dg/compat/scalar-return-1_x.c: New file. * gcc.dg/compat/scalar-return-1_y.c: New file. * gcc.dg/compat/scalar-return-2_main.c: New file. * gcc.dg/compat/scalar-return-2_x.c: New file. * gcc.dg/compat/scalar-return-2_y.c: New file. * gcc.dg/compat/struct-return-3_main.c: New file. * gcc.dg/compat/struct-return-3_y.c: New file. * gcc.dg/compat/struct-return-3_x.c: New file. * gcc.dg/compat/struct-return-2_main.c: New file. * gcc.dg/compat/struct-return-2_x.c: New file. * gcc.dg/compat/struct-return-2_y.c: New file. (I thought I had committed these yesterday) From-SVN: r67070
This commit is contained in:
parent
81888fcd42
commit
9008d5b47e
|
@ -1,3 +1,18 @@
|
|||
2003-05-21 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* gcc.dg/compat/scalar-return-1_main.c: New file.
|
||||
* gcc.dg/compat/scalar-return-1_x.c: New file.
|
||||
* gcc.dg/compat/scalar-return-1_y.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_main.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_x.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_y.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_main.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_y.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_x.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_main.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_x.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_y.c: New file.
|
||||
|
||||
2003-05-21 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
* g++.old-deja/g++.law/profile1.C (dg-options): Add -static to options
|
||||
|
@ -30,19 +45,6 @@
|
|||
* gcc.dg/compat/fp-struct-test-by-value-y.h: New file.
|
||||
* gcc.dg/compat/fp-struct-test-by-value-x.h: New file.
|
||||
|
||||
* gcc.dg/compat/scalar-return-1_main.c: New file.
|
||||
* gcc.dg/compat/scalar-return-1_x.c: New file.
|
||||
* gcc.dg/compat/scalar-return-1_y.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_main.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_x.c: New file.
|
||||
* gcc.dg/compat/scalar-return-2_y.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_main.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_y.c: New file.
|
||||
* gcc.dg/compat/struct-return-3_x.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_main.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_x.c: New file.
|
||||
* gcc.dg/compat/struct-return-2_y.c: New file.
|
||||
|
||||
2003-05-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.dg/20030225-2.c: New test.
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* Test function return values. This test includes scalar types that
|
||||
are supported by va_arg. */
|
||||
|
||||
extern void scalar_return_1_x (void);
|
||||
extern void exit (int);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
scalar_return_1_x ();
|
||||
exit (0);
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
#define T(NAME, TYPE, INITVAL) \
|
||||
TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
|
||||
TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
|
||||
TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
|
||||
TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
|
||||
\
|
||||
extern void init##NAME (TYPE *p, TYPE v); \
|
||||
extern void checkg##NAME (void); \
|
||||
extern TYPE test0##NAME (void); \
|
||||
extern TYPE test1##NAME (TYPE); \
|
||||
extern TYPE testva##NAME (int n, ...); \
|
||||
\
|
||||
void \
|
||||
check##NAME (TYPE x, TYPE v) \
|
||||
{ \
|
||||
if (x != v) \
|
||||
{ \
|
||||
DEBUG_NL; \
|
||||
abort (); \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
testit##NAME (void) \
|
||||
{ \
|
||||
TYPE rslt; \
|
||||
DEBUG_FPUTS (#NAME); \
|
||||
init##NAME (&g01##NAME, 1); \
|
||||
init##NAME (&g02##NAME, 2); \
|
||||
init##NAME (&g03##NAME, 3); \
|
||||
init##NAME (&g04##NAME, 4); \
|
||||
init##NAME (&g05##NAME, 5); \
|
||||
init##NAME (&g06##NAME, 6); \
|
||||
init##NAME (&g07##NAME, 7); \
|
||||
init##NAME (&g08##NAME, 8); \
|
||||
init##NAME (&g09##NAME, 9); \
|
||||
init##NAME (&g10##NAME, 10); \
|
||||
init##NAME (&g11##NAME, 11); \
|
||||
init##NAME (&g12##NAME, 12); \
|
||||
init##NAME (&g13##NAME, 13); \
|
||||
init##NAME (&g14##NAME, 14); \
|
||||
init##NAME (&g15##NAME, 15); \
|
||||
init##NAME (&g16##NAME, 16); \
|
||||
checkg##NAME (); \
|
||||
DEBUG_FPUTS (" test0"); \
|
||||
rslt = test0##NAME (); \
|
||||
check##NAME (rslt, g01##NAME); \
|
||||
DEBUG_FPUTS (" test1"); \
|
||||
rslt = test1##NAME (g01##NAME); \
|
||||
check##NAME (rslt, g01##NAME); \
|
||||
DEBUG_FPUTS (" testva"); \
|
||||
rslt = testva##NAME (1, g01##NAME); \
|
||||
check##NAME (rslt, g01##NAME); \
|
||||
rslt = testva##NAME (5, g01##NAME, g02##NAME, g03##NAME, \
|
||||
g04##NAME, g05##NAME); \
|
||||
check##NAME (rslt, g05##NAME); \
|
||||
rslt = testva##NAME (9, g01##NAME, g02##NAME, g03##NAME, \
|
||||
g04##NAME, g05##NAME, g06##NAME, \
|
||||
g07##NAME, g08##NAME, g09##NAME); \
|
||||
check##NAME (rslt, g09##NAME); \
|
||||
rslt = testva##NAME (16, g01##NAME, g02##NAME, g03##NAME, \
|
||||
g04##NAME, g05##NAME, g06##NAME, \
|
||||
g07##NAME, g08##NAME, g09##NAME, \
|
||||
g10##NAME, g11##NAME, g12##NAME, \
|
||||
g13##NAME, g14##NAME, g15##NAME, \
|
||||
g16##NAME); \
|
||||
check##NAME (rslt, g16##NAME); \
|
||||
DEBUG_NL; \
|
||||
}
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
T(ui, unsigned int, 51)
|
||||
T(si, int, (-55))
|
||||
T(ul, unsigned long, 61)
|
||||
T(sl, long, (-66))
|
||||
T(ull, unsigned long long, 71)
|
||||
T(sll, long long, (-77))
|
||||
T(d, double, 91.0)
|
||||
T(ld, long double, 92.0)
|
||||
|
||||
#undef T
|
||||
|
||||
void
|
||||
scalar_return_1_x ()
|
||||
{
|
||||
#define T(NAME) testit##NAME ();
|
||||
|
||||
T(ui)
|
||||
T(si)
|
||||
T(ul)
|
||||
T(sl)
|
||||
T(ull)
|
||||
T(sll)
|
||||
T(d)
|
||||
T(ld)
|
||||
|
||||
#undef T
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
#include <stdarg.h>
|
||||
|
||||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
/* Turn off checking for variable arguments with -DSKIPVA. */
|
||||
#ifdef SKIPVA
|
||||
const int test_va = 0;
|
||||
#else
|
||||
const int test_va = 1;
|
||||
#endif
|
||||
|
||||
#define T(NAME, TYPE, INITVAL) \
|
||||
extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
|
||||
extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
|
||||
extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
|
||||
extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
|
||||
\
|
||||
extern void check##NAME (TYPE x, TYPE v); \
|
||||
\
|
||||
void \
|
||||
init##NAME (TYPE *p, TYPE v) \
|
||||
{ \
|
||||
*p = v + INITVAL; \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
checkg##NAME (void) \
|
||||
{ \
|
||||
check##NAME (g01##NAME, 1+INITVAL); \
|
||||
check##NAME (g02##NAME, 2+INITVAL); \
|
||||
check##NAME (g03##NAME, 3+INITVAL); \
|
||||
check##NAME (g04##NAME, 4+INITVAL); \
|
||||
check##NAME (g05##NAME, 5+INITVAL); \
|
||||
check##NAME (g06##NAME, 6+INITVAL); \
|
||||
check##NAME (g07##NAME, 7+INITVAL); \
|
||||
check##NAME (g08##NAME, 8+INITVAL); \
|
||||
check##NAME (g09##NAME, 9+INITVAL); \
|
||||
check##NAME (g10##NAME, 10+INITVAL); \
|
||||
check##NAME (g11##NAME, 11+INITVAL); \
|
||||
check##NAME (g12##NAME, 12+INITVAL); \
|
||||
check##NAME (g13##NAME, 13+INITVAL); \
|
||||
check##NAME (g14##NAME, 14+INITVAL); \
|
||||
check##NAME (g15##NAME, 15+INITVAL); \
|
||||
check##NAME (g16##NAME, 16+INITVAL); \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test0##NAME (void) \
|
||||
{ \
|
||||
return g01##NAME; \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test1##NAME (TYPE x01) \
|
||||
{ \
|
||||
return x01; \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
testva##NAME (int n, ...) \
|
||||
{ \
|
||||
int i; \
|
||||
TYPE rslt; \
|
||||
va_list ap; \
|
||||
if (test_va) \
|
||||
{ \
|
||||
va_start (ap, n); \
|
||||
for (i = 0; i < n; i++) \
|
||||
{ \
|
||||
rslt = va_arg (ap, TYPE); \
|
||||
DEBUG_DOT; \
|
||||
} \
|
||||
va_end (ap); \
|
||||
} \
|
||||
return rslt; \
|
||||
}
|
||||
|
||||
T(ui, unsigned int, 51)
|
||||
T(si, int, (-55))
|
||||
T(ul, unsigned long, 61)
|
||||
T(sl, long, (-66))
|
||||
T(ull, unsigned long long, 71)
|
||||
T(sll, long long, (-77))
|
||||
T(d, double, 91.0)
|
||||
T(ld, long double, 92.0)
|
|
@ -0,0 +1,12 @@
|
|||
/* Test function return values. This test includes scalar types that
|
||||
are not supported by va_arg. */
|
||||
|
||||
extern void scalar_return_2_x (void);
|
||||
extern void exit (int);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
scalar_return_2_x ();
|
||||
exit (0);
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
#define T(NAME, TYPE, INITVAL) \
|
||||
TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
|
||||
TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
|
||||
TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
|
||||
TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
|
||||
\
|
||||
extern void init##NAME (TYPE *p, TYPE v); \
|
||||
extern void checkg##NAME (void); \
|
||||
extern TYPE test0##NAME (void); \
|
||||
extern TYPE test1##NAME (TYPE); \
|
||||
\
|
||||
void \
|
||||
check##NAME (TYPE x, TYPE v) \
|
||||
{ \
|
||||
if (x != v) \
|
||||
{ \
|
||||
DEBUG_NL; \
|
||||
abort (); \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
testit##NAME (void) \
|
||||
{ \
|
||||
TYPE rslt; \
|
||||
DEBUG_FPUTS (#NAME); \
|
||||
init##NAME (&g01##NAME, 1); \
|
||||
init##NAME (&g02##NAME, 2); \
|
||||
init##NAME (&g03##NAME, 3); \
|
||||
init##NAME (&g04##NAME, 4); \
|
||||
init##NAME (&g05##NAME, 5); \
|
||||
init##NAME (&g06##NAME, 6); \
|
||||
init##NAME (&g07##NAME, 7); \
|
||||
init##NAME (&g08##NAME, 8); \
|
||||
init##NAME (&g09##NAME, 9); \
|
||||
init##NAME (&g10##NAME, 10); \
|
||||
init##NAME (&g11##NAME, 11); \
|
||||
init##NAME (&g12##NAME, 12); \
|
||||
init##NAME (&g13##NAME, 13); \
|
||||
init##NAME (&g14##NAME, 14); \
|
||||
init##NAME (&g15##NAME, 15); \
|
||||
init##NAME (&g16##NAME, 16); \
|
||||
checkg##NAME (); \
|
||||
DEBUG_FPUTS (" test0"); \
|
||||
rslt = test0##NAME (); \
|
||||
check##NAME (rslt, g01##NAME); \
|
||||
DEBUG_FPUTS (" test1"); \
|
||||
rslt = test1##NAME (g01##NAME); \
|
||||
check##NAME (rslt, g01##NAME); \
|
||||
DEBUG_NL; \
|
||||
}
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
T(c, char, 21)
|
||||
T(uc, unsigned char, 22)
|
||||
T(sc, signed char, (-33))
|
||||
T(us, unsigned short, 41)
|
||||
T(ss, short, (-44))
|
||||
T(f, float, 90.0)
|
||||
|
||||
#undef T
|
||||
|
||||
void
|
||||
scalar_return_2_x ()
|
||||
{
|
||||
#define T(NAME) testit##NAME ();
|
||||
|
||||
T(c)
|
||||
T(uc)
|
||||
T(sc)
|
||||
T(us)
|
||||
T(ss)
|
||||
T(f)
|
||||
|
||||
#undef T
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
#include <stdarg.h>
|
||||
|
||||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
/* Turn off checking for variable arguments with -DSKIPVA. */
|
||||
#ifdef SKIPVA
|
||||
const int test_va = 0;
|
||||
#else
|
||||
const int test_va = 1;
|
||||
#endif
|
||||
|
||||
#define T(NAME, TYPE, INITVAL) \
|
||||
extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
|
||||
extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
|
||||
extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
|
||||
extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
|
||||
\
|
||||
extern void check##NAME (TYPE x, TYPE v); \
|
||||
\
|
||||
void \
|
||||
init##NAME (TYPE *p, TYPE v) \
|
||||
{ \
|
||||
*p = v + INITVAL; \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
checkg##NAME (void) \
|
||||
{ \
|
||||
check##NAME (g01##NAME, 1+INITVAL); \
|
||||
check##NAME (g02##NAME, 2+INITVAL); \
|
||||
check##NAME (g03##NAME, 3+INITVAL); \
|
||||
check##NAME (g04##NAME, 4+INITVAL); \
|
||||
check##NAME (g05##NAME, 5+INITVAL); \
|
||||
check##NAME (g06##NAME, 6+INITVAL); \
|
||||
check##NAME (g07##NAME, 7+INITVAL); \
|
||||
check##NAME (g08##NAME, 8+INITVAL); \
|
||||
check##NAME (g09##NAME, 9+INITVAL); \
|
||||
check##NAME (g10##NAME, 10+INITVAL); \
|
||||
check##NAME (g11##NAME, 11+INITVAL); \
|
||||
check##NAME (g12##NAME, 12+INITVAL); \
|
||||
check##NAME (g13##NAME, 13+INITVAL); \
|
||||
check##NAME (g14##NAME, 14+INITVAL); \
|
||||
check##NAME (g15##NAME, 15+INITVAL); \
|
||||
check##NAME (g16##NAME, 16+INITVAL); \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test0##NAME (void) \
|
||||
{ \
|
||||
return g01##NAME; \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test1##NAME (TYPE x01) \
|
||||
{ \
|
||||
return x01; \
|
||||
}
|
||||
|
||||
T(c, char, 21)
|
||||
T(uc, unsigned char, 22)
|
||||
T(sc, signed char, (-33))
|
||||
T(us, unsigned short, 41)
|
||||
T(ss, short, (-44))
|
||||
T(f, float, 90.0)
|
|
@ -0,0 +1,12 @@
|
|||
/* Test function return values. This test includes structs that are
|
||||
arrays of unsigned integral scalars. */
|
||||
|
||||
extern void struct_return_2_x (void);
|
||||
extern void exit (int);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct_return_2_x ();
|
||||
exit (0);
|
||||
}
|
|
@ -0,0 +1,205 @@
|
|||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
#define T(N, NAME, TYPE) \
|
||||
struct S##NAME##N { TYPE i[N]; }; \
|
||||
struct S##NAME##N g1s##NAME##N, g2s##NAME##N; \
|
||||
struct S##NAME##N g3s##NAME##N, g4s##NAME##N; \
|
||||
struct S##NAME##N g5s##NAME##N, g6s##NAME##N; \
|
||||
struct S##NAME##N g7s##NAME##N, g8s##NAME##N; \
|
||||
struct S##NAME##N g9s##NAME##N, g10s##NAME##N; \
|
||||
struct S##NAME##N g11s##NAME##N, g12s##NAME##N; \
|
||||
struct S##NAME##N g13s##NAME##N, g14s##NAME##N; \
|
||||
struct S##NAME##N g15s##NAME##N, g16s##NAME##N; \
|
||||
\
|
||||
extern void init##NAME##N (struct S##NAME##N *p, int i); \
|
||||
extern void checkg##NAME##N (void); \
|
||||
extern struct S##NAME##N test0##NAME##N (void); \
|
||||
extern struct S##NAME##N test1##NAME##N (struct S##NAME##N); \
|
||||
extern struct S##NAME##N testva##NAME##N (int n, ...); \
|
||||
\
|
||||
void \
|
||||
check##NAME##N (struct S##NAME##N *p, int i) \
|
||||
{ \
|
||||
int j; \
|
||||
for (j = 0; j < N; j++) \
|
||||
if (p->i[j] != (TYPE) (i + j)) \
|
||||
{ \
|
||||
DEBUG_NL; \
|
||||
abort (); \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
testit##NAME##N (void) \
|
||||
{ \
|
||||
struct S##NAME##N rslt; \
|
||||
DEBUG_FPUTS (#NAME "[" #N "]"); \
|
||||
init##NAME##N ( &g1s##NAME##N, 1*16); \
|
||||
init##NAME##N ( &g2s##NAME##N, 2*16); \
|
||||
init##NAME##N ( &g3s##NAME##N, 3*16); \
|
||||
init##NAME##N ( &g4s##NAME##N, 4*16); \
|
||||
init##NAME##N ( &g5s##NAME##N, 5*16); \
|
||||
init##NAME##N ( &g6s##NAME##N, 6*16); \
|
||||
init##NAME##N ( &g7s##NAME##N, 7*16); \
|
||||
init##NAME##N ( &g8s##NAME##N, 8*16); \
|
||||
init##NAME##N ( &g9s##NAME##N, 9*16); \
|
||||
init##NAME##N (&g10s##NAME##N, 10*16); \
|
||||
init##NAME##N (&g11s##NAME##N, 11*16); \
|
||||
init##NAME##N (&g12s##NAME##N, 12*16); \
|
||||
init##NAME##N (&g13s##NAME##N, 13*16); \
|
||||
init##NAME##N (&g14s##NAME##N, 14*16); \
|
||||
init##NAME##N (&g15s##NAME##N, 15*16); \
|
||||
init##NAME##N (&g16s##NAME##N, 16*16); \
|
||||
checkg##NAME##N (); \
|
||||
DEBUG_FPUTS (" test0"); \
|
||||
rslt = test0##NAME##N (); \
|
||||
check##NAME##N (&rslt, 1*16); \
|
||||
DEBUG_FPUTS (" test1"); \
|
||||
rslt = test1##NAME##N (g1s##NAME##N); \
|
||||
check##NAME##N (&rslt, 1*16); \
|
||||
DEBUG_FPUTS (" testva"); \
|
||||
rslt = testva##NAME##N (1, g1s##NAME##N); \
|
||||
check##NAME##N (&rslt, 1*16); \
|
||||
rslt = testva##NAME##N (5, \
|
||||
g1s##NAME##N, g2s##NAME##N, \
|
||||
g3s##NAME##N, g4s##NAME##N, \
|
||||
g5s##NAME##N); \
|
||||
check##NAME##N (&rslt, 5*16); \
|
||||
rslt = testva##NAME##N (9, \
|
||||
g1s##NAME##N, g2s##NAME##N, \
|
||||
g3s##NAME##N, g4s##NAME##N, \
|
||||
g5s##NAME##N, g6s##NAME##N, \
|
||||
g7s##NAME##N, g8s##NAME##N, \
|
||||
g9s##NAME##N); \
|
||||
check##NAME##N (&rslt, 9*16); \
|
||||
rslt = testva##NAME##N (16, \
|
||||
g1s##NAME##N, g2s##NAME##N, \
|
||||
g3s##NAME##N, g4s##NAME##N, \
|
||||
g5s##NAME##N, g6s##NAME##N, \
|
||||
g7s##NAME##N, g8s##NAME##N, \
|
||||
g9s##NAME##N, g10s##NAME##N, \
|
||||
g11s##NAME##N, g12s##NAME##N, \
|
||||
g13s##NAME##N, g14s##NAME##N, \
|
||||
g15s##NAME##N, g16s##NAME##N); \
|
||||
check##NAME##N (&rslt, 16*16); \
|
||||
DEBUG_NL; \
|
||||
}
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
T(0, uc, unsigned char)
|
||||
T(1, uc, unsigned char)
|
||||
T(2, uc, unsigned char)
|
||||
T(3, uc, unsigned char)
|
||||
T(4, uc, unsigned char)
|
||||
T(5, uc, unsigned char)
|
||||
T(6, uc, unsigned char)
|
||||
T(7, uc, unsigned char)
|
||||
T(8, uc, unsigned char)
|
||||
T(9, uc, unsigned char)
|
||||
T(10, uc, unsigned char)
|
||||
T(11, uc, unsigned char)
|
||||
T(12, uc, unsigned char)
|
||||
T(13, uc, unsigned char)
|
||||
T(14, uc, unsigned char)
|
||||
T(15, uc, unsigned char)
|
||||
T(0, us, unsigned short)
|
||||
T(1, us, unsigned short)
|
||||
T(2, us, unsigned short)
|
||||
T(3, us, unsigned short)
|
||||
T(4, us, unsigned short)
|
||||
T(5, us, unsigned short)
|
||||
T(6, us, unsigned short)
|
||||
T(7, us, unsigned short)
|
||||
T(8, us, unsigned short)
|
||||
T(9, us, unsigned short)
|
||||
T(10, us, unsigned short)
|
||||
T(11, us, unsigned short)
|
||||
T(12, us, unsigned short)
|
||||
T(13, us, unsigned short)
|
||||
T(14, us, unsigned short)
|
||||
T(15, us, unsigned short)
|
||||
T(0, ui, unsigned int)
|
||||
T(1, ui, unsigned int)
|
||||
T(2, ui, unsigned int)
|
||||
T(3, ui, unsigned int)
|
||||
T(4, ui, unsigned int)
|
||||
T(5, ui, unsigned int)
|
||||
T(6, ui, unsigned int)
|
||||
T(7, ui, unsigned int)
|
||||
T(8, ui, unsigned int)
|
||||
T(9, ui, unsigned int)
|
||||
T(10, ui, unsigned int)
|
||||
T(11, ui, unsigned int)
|
||||
T(12, ui, unsigned int)
|
||||
T(13, ui, unsigned int)
|
||||
T(14, ui, unsigned int)
|
||||
T(15, ui, unsigned int)
|
||||
|
||||
#undef T
|
||||
|
||||
void
|
||||
struct_return_2_x ()
|
||||
{
|
||||
#define T(N, NAME, TYPE) testit##NAME##N ();
|
||||
|
||||
T(0, uc, unsigned char)
|
||||
T(1, uc, unsigned char)
|
||||
T(2, uc, unsigned char)
|
||||
T(3, uc, unsigned char)
|
||||
T(4, uc, unsigned char)
|
||||
T(5, uc, unsigned char)
|
||||
T(6, uc, unsigned char)
|
||||
T(7, uc, unsigned char)
|
||||
T(8, uc, unsigned char)
|
||||
T(9, uc, unsigned char)
|
||||
T(10, uc, unsigned char)
|
||||
T(11, uc, unsigned char)
|
||||
T(12, uc, unsigned char)
|
||||
T(13, uc, unsigned char)
|
||||
T(14, uc, unsigned char)
|
||||
T(15, uc, unsigned char)
|
||||
T(0, us, unsigned short)
|
||||
T(1, us, unsigned short)
|
||||
T(2, us, unsigned short)
|
||||
T(3, us, unsigned short)
|
||||
T(4, us, unsigned short)
|
||||
T(5, us, unsigned short)
|
||||
T(6, us, unsigned short)
|
||||
T(7, us, unsigned short)
|
||||
T(8, us, unsigned short)
|
||||
T(9, us, unsigned short)
|
||||
T(10, us, unsigned short)
|
||||
T(11, us, unsigned short)
|
||||
T(12, us, unsigned short)
|
||||
T(13, us, unsigned short)
|
||||
T(14, us, unsigned short)
|
||||
T(15, us, unsigned short)
|
||||
T(0, ui, unsigned int)
|
||||
T(1, ui, unsigned int)
|
||||
T(2, ui, unsigned int)
|
||||
T(3, ui, unsigned int)
|
||||
T(4, ui, unsigned int)
|
||||
T(5, ui, unsigned int)
|
||||
T(6, ui, unsigned int)
|
||||
T(7, ui, unsigned int)
|
||||
T(8, ui, unsigned int)
|
||||
T(9, ui, unsigned int)
|
||||
T(10, ui, unsigned int)
|
||||
T(11, ui, unsigned int)
|
||||
T(12, ui, unsigned int)
|
||||
T(13, ui, unsigned int)
|
||||
T(14, ui, unsigned int)
|
||||
T(15, ui, unsigned int)
|
||||
|
||||
#undef T
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
#include <stdarg.h>
|
||||
|
||||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
/* Turn off checking for variable arguments with -DSKIPVA. */
|
||||
#ifdef SKIPVA
|
||||
const int test_va = 0;
|
||||
#else
|
||||
const int test_va = 1;
|
||||
#endif
|
||||
|
||||
#define T(N, NAME, TYPE) \
|
||||
struct S##NAME##N { TYPE i[N]; }; \
|
||||
\
|
||||
extern struct S##NAME##N g1s##NAME##N, g2s##NAME##N; \
|
||||
extern struct S##NAME##N g3s##NAME##N, g4s##NAME##N; \
|
||||
extern struct S##NAME##N g5s##NAME##N, g6s##NAME##N; \
|
||||
extern struct S##NAME##N g7s##NAME##N, g8s##NAME##N; \
|
||||
extern struct S##NAME##N g9s##NAME##N, g10s##NAME##N; \
|
||||
extern struct S##NAME##N g11s##NAME##N, g12s##NAME##N; \
|
||||
extern struct S##NAME##N g13s##NAME##N, g14s##NAME##N; \
|
||||
extern struct S##NAME##N g15s##NAME##N, g16s##NAME##N; \
|
||||
\
|
||||
extern void check##NAME##N (struct S##NAME##N *p, int i); \
|
||||
\
|
||||
void \
|
||||
init##NAME##N (struct S##NAME##N *p, int i) \
|
||||
{ \
|
||||
int j; \
|
||||
for (j = 0; j < N; j++) \
|
||||
p->i[j] = i + j; \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
checkg##NAME##N (void) \
|
||||
{ \
|
||||
check##NAME##N ( &g1s##NAME##N, 1*16); \
|
||||
check##NAME##N ( &g2s##NAME##N, 2*16); \
|
||||
check##NAME##N ( &g3s##NAME##N, 3*16); \
|
||||
check##NAME##N ( &g4s##NAME##N, 4*16); \
|
||||
check##NAME##N ( &g5s##NAME##N, 5*16); \
|
||||
check##NAME##N ( &g6s##NAME##N, 6*16); \
|
||||
check##NAME##N ( &g7s##NAME##N, 7*16); \
|
||||
check##NAME##N ( &g8s##NAME##N, 8*16); \
|
||||
check##NAME##N ( &g9s##NAME##N, 9*16); \
|
||||
check##NAME##N (&g10s##NAME##N, 10*16); \
|
||||
check##NAME##N (&g11s##NAME##N, 11*16); \
|
||||
check##NAME##N (&g12s##NAME##N, 12*16); \
|
||||
check##NAME##N (&g13s##NAME##N, 13*16); \
|
||||
check##NAME##N (&g14s##NAME##N, 14*16); \
|
||||
check##NAME##N (&g15s##NAME##N, 15*16); \
|
||||
check##NAME##N (&g16s##NAME##N, 16*16); \
|
||||
} \
|
||||
\
|
||||
struct S##NAME##N \
|
||||
test0##NAME##N (void) \
|
||||
{ \
|
||||
return g1s##NAME##N; \
|
||||
} \
|
||||
\
|
||||
struct S##NAME##N \
|
||||
test1##NAME##N (struct S##NAME##N x01) \
|
||||
{ \
|
||||
return x01; \
|
||||
} \
|
||||
\
|
||||
struct S##NAME##N \
|
||||
testva##NAME##N (int n, ...) \
|
||||
{ \
|
||||
int i; \
|
||||
struct S##NAME##N rslt; \
|
||||
va_list ap; \
|
||||
if (test_va) \
|
||||
{ \
|
||||
va_start (ap, n); \
|
||||
for (i = 0; i < n; i++) \
|
||||
{ \
|
||||
rslt = va_arg (ap, struct S##NAME##N); \
|
||||
DEBUG_DOT; \
|
||||
} \
|
||||
va_end (ap); \
|
||||
} \
|
||||
return rslt; \
|
||||
}
|
||||
|
||||
T(0, uc, unsigned char)
|
||||
T(1, uc, unsigned char)
|
||||
T(2, uc, unsigned char)
|
||||
T(3, uc, unsigned char)
|
||||
T(4, uc, unsigned char)
|
||||
T(5, uc, unsigned char)
|
||||
T(6, uc, unsigned char)
|
||||
T(7, uc, unsigned char)
|
||||
T(8, uc, unsigned char)
|
||||
T(9, uc, unsigned char)
|
||||
T(10, uc, unsigned char)
|
||||
T(11, uc, unsigned char)
|
||||
T(12, uc, unsigned char)
|
||||
T(13, uc, unsigned char)
|
||||
T(14, uc, unsigned char)
|
||||
T(15, uc, unsigned char)
|
||||
T(0, us, unsigned short)
|
||||
T(1, us, unsigned short)
|
||||
T(2, us, unsigned short)
|
||||
T(3, us, unsigned short)
|
||||
T(4, us, unsigned short)
|
||||
T(5, us, unsigned short)
|
||||
T(6, us, unsigned short)
|
||||
T(7, us, unsigned short)
|
||||
T(8, us, unsigned short)
|
||||
T(9, us, unsigned short)
|
||||
T(10, us, unsigned short)
|
||||
T(11, us, unsigned short)
|
||||
T(12, us, unsigned short)
|
||||
T(13, us, unsigned short)
|
||||
T(14, us, unsigned short)
|
||||
T(15, us, unsigned short)
|
||||
T(0, ui, unsigned int)
|
||||
T(1, ui, unsigned int)
|
||||
T(2, ui, unsigned int)
|
||||
T(3, ui, unsigned int)
|
||||
T(4, ui, unsigned int)
|
||||
T(5, ui, unsigned int)
|
||||
T(6, ui, unsigned int)
|
||||
T(7, ui, unsigned int)
|
||||
T(8, ui, unsigned int)
|
||||
T(9, ui, unsigned int)
|
||||
T(10, ui, unsigned int)
|
||||
T(11, ui, unsigned int)
|
||||
T(12, ui, unsigned int)
|
||||
T(13, ui, unsigned int)
|
||||
T(14, ui, unsigned int)
|
||||
T(15, ui, unsigned int)
|
|
@ -0,0 +1,13 @@
|
|||
/* Test function return values. For this test, all struct members are
|
||||
scalar integral types and the structs are "small": 1, 2, 4, 8, and 12
|
||||
bytes for LP64. */
|
||||
|
||||
extern void struct_return_3_x (void);
|
||||
extern void exit (int);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct_return_3_x ();
|
||||
exit (0);
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
#define T(TYPE) \
|
||||
TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE; \
|
||||
TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE; \
|
||||
TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE; \
|
||||
TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE; \
|
||||
\
|
||||
extern void init##TYPE (TYPE *p, int i); \
|
||||
extern void checkg##TYPE (void); \
|
||||
extern TYPE test0##TYPE (void); \
|
||||
extern TYPE test1##TYPE (TYPE); \
|
||||
extern TYPE testva##TYPE (int n, ...); \
|
||||
\
|
||||
void \
|
||||
testit##TYPE (void) \
|
||||
{ \
|
||||
TYPE rslt; \
|
||||
DEBUG_FPUTS (#TYPE); \
|
||||
init##TYPE (&g01##TYPE, 1); \
|
||||
init##TYPE (&g02##TYPE, 2); \
|
||||
init##TYPE (&g03##TYPE, 3); \
|
||||
init##TYPE (&g04##TYPE, 4); \
|
||||
init##TYPE (&g05##TYPE, 5); \
|
||||
init##TYPE (&g06##TYPE, 6); \
|
||||
init##TYPE (&g07##TYPE, 7); \
|
||||
init##TYPE (&g08##TYPE, 8); \
|
||||
init##TYPE (&g09##TYPE, 9); \
|
||||
init##TYPE (&g10##TYPE, 10); \
|
||||
init##TYPE (&g11##TYPE, 11); \
|
||||
init##TYPE (&g12##TYPE, 12); \
|
||||
init##TYPE (&g13##TYPE, 13); \
|
||||
init##TYPE (&g14##TYPE, 14); \
|
||||
init##TYPE (&g15##TYPE, 15); \
|
||||
init##TYPE (&g16##TYPE, 16); \
|
||||
checkg##TYPE (); \
|
||||
DEBUG_FPUTS (" test0"); \
|
||||
rslt = test0##TYPE (); \
|
||||
check##TYPE (rslt, 1); \
|
||||
DEBUG_FPUTS (" test1"); \
|
||||
rslt = test1##TYPE (g01##TYPE); \
|
||||
check##TYPE (rslt, 1); \
|
||||
DEBUG_FPUTS (" testva"); \
|
||||
rslt = testva##TYPE (1, g01##TYPE); \
|
||||
check##TYPE (rslt, 1); \
|
||||
rslt = testva##TYPE (5, g01##TYPE, g02##TYPE, \
|
||||
g03##TYPE, g04##TYPE, \
|
||||
g05##TYPE); \
|
||||
check##TYPE (rslt, 5); \
|
||||
rslt = testva##TYPE (9, g01##TYPE, g02##TYPE, \
|
||||
g03##TYPE, g04##TYPE, \
|
||||
g05##TYPE, g06##TYPE, \
|
||||
g07##TYPE, g08##TYPE, \
|
||||
g09##TYPE); \
|
||||
check##TYPE (rslt, 9); \
|
||||
rslt = testva##TYPE (16, g01##TYPE, g02##TYPE, \
|
||||
g03##TYPE, g04##TYPE, \
|
||||
g05##TYPE, g06##TYPE, \
|
||||
g07##TYPE, g08##TYPE, \
|
||||
g09##TYPE, g10##TYPE, \
|
||||
g11##TYPE, g12##TYPE, \
|
||||
g13##TYPE, g14##TYPE, \
|
||||
g15##TYPE, g16##TYPE); \
|
||||
check##TYPE (rslt, 16); \
|
||||
DEBUG_NL; \
|
||||
}
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
#include "small-struct-defs.h"
|
||||
#include "small-struct-check.h"
|
||||
|
||||
T(Sc)
|
||||
T(Ss)
|
||||
T(Si)
|
||||
T(Scs)
|
||||
T(Ssc)
|
||||
T(Sic)
|
||||
T(Sci)
|
||||
T(Ssi)
|
||||
T(Sis)
|
||||
T(Scsi)
|
||||
T(Scis)
|
||||
T(Ssci)
|
||||
T(Ssic)
|
||||
T(Sisc)
|
||||
T(Sics)
|
||||
|
||||
#undef T
|
||||
|
||||
void
|
||||
struct_return_3_x ()
|
||||
{
|
||||
#define T(TYPE) testit##TYPE ();
|
||||
|
||||
T(Sc)
|
||||
T(Ss)
|
||||
T(Si)
|
||||
T(Scs)
|
||||
T(Ssc)
|
||||
T(Sic)
|
||||
T(Sci)
|
||||
T(Ssi)
|
||||
T(Sis)
|
||||
T(Scsi)
|
||||
T(Scis)
|
||||
T(Ssci)
|
||||
T(Ssic)
|
||||
T(Sisc)
|
||||
T(Sics)
|
||||
|
||||
#undef T
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
#include <stdarg.h>
|
||||
|
||||
#ifdef DBG
|
||||
#include <stdio.h>
|
||||
#define DEBUG_FPUTS(x) fputs (x, stdout)
|
||||
#define DEBUG_DOT putc ('.', stdout)
|
||||
#define DEBUG_NL putc ('\n', stdout)
|
||||
#else
|
||||
#define DEBUG_FPUTS(x)
|
||||
#define DEBUG_DOT
|
||||
#define DEBUG_NL
|
||||
#endif
|
||||
|
||||
/* Turn off checking for variable arguments with -DSKIPVA. */
|
||||
#ifdef SKIPVA
|
||||
const int test_va = 0;
|
||||
#else
|
||||
const int test_va = 1;
|
||||
#endif
|
||||
|
||||
#include "small-struct-defs.h"
|
||||
#include "small-struct-init.h"
|
||||
|
||||
#define T(TYPE) \
|
||||
extern TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE; \
|
||||
extern TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE; \
|
||||
extern TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE; \
|
||||
extern TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE; \
|
||||
\
|
||||
extern void check##TYPE (TYPE x, int i); \
|
||||
\
|
||||
void \
|
||||
checkg##TYPE (void) \
|
||||
{ \
|
||||
check##TYPE (g01##TYPE, 1); \
|
||||
check##TYPE (g02##TYPE, 2); \
|
||||
check##TYPE (g03##TYPE, 3); \
|
||||
check##TYPE (g04##TYPE, 4); \
|
||||
check##TYPE (g05##TYPE, 5); \
|
||||
check##TYPE (g06##TYPE, 6); \
|
||||
check##TYPE (g07##TYPE, 7); \
|
||||
check##TYPE (g08##TYPE, 8); \
|
||||
check##TYPE (g09##TYPE, 9); \
|
||||
check##TYPE (g10##TYPE, 10); \
|
||||
check##TYPE (g11##TYPE, 11); \
|
||||
check##TYPE (g12##TYPE, 12); \
|
||||
check##TYPE (g13##TYPE, 13); \
|
||||
check##TYPE (g14##TYPE, 14); \
|
||||
check##TYPE (g15##TYPE, 15); \
|
||||
check##TYPE (g16##TYPE, 16); \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test0##TYPE (void) \
|
||||
{ \
|
||||
return g01##TYPE; \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
test1##TYPE (TYPE x01) \
|
||||
{ \
|
||||
return x01; \
|
||||
} \
|
||||
\
|
||||
TYPE \
|
||||
testva##TYPE (int n, ...) \
|
||||
{ \
|
||||
int i; \
|
||||
TYPE rslt; \
|
||||
va_list ap; \
|
||||
if (test_va) \
|
||||
{ \
|
||||
va_start (ap, n); \
|
||||
for (i = 0; i < n; i++) \
|
||||
{ \
|
||||
rslt = va_arg (ap, TYPE); \
|
||||
DEBUG_DOT; \
|
||||
} \
|
||||
va_end (ap); \
|
||||
} \
|
||||
return rslt; \
|
||||
}
|
||||
|
||||
T(Sc)
|
||||
T(Ss)
|
||||
T(Si)
|
||||
T(Scs)
|
||||
T(Ssc)
|
||||
T(Sic)
|
||||
T(Sci)
|
||||
T(Ssi)
|
||||
T(Sis)
|
||||
T(Scsi)
|
||||
T(Scis)
|
||||
T(Ssci)
|
||||
T(Ssic)
|
||||
T(Sisc)
|
||||
T(Sics)
|
Loading…
Reference in New Issue