#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 n, int c)
|
void bar (int n, int c)
|
{
|
{
|
static int lastn = -1, lastc = -1;
|
static int lastn = -1, lastc = -1;
|
|
|
if (lastn != n)
|
if (lastn != n)
|
{
|
{
|
if (lastc != lastn)
|
if (lastc != lastn)
|
abort ();
|
abort ();
|
lastc = 0;
|
lastc = 0;
|
lastn = n;
|
lastn = n;
|
}
|
}
|
|
|
if (c != (char) (lastc ^ (n << 3)))
|
if (c != (char) (lastc ^ (n << 3)))
|
abort ();
|
abort ();
|
lastc++;
|
lastc++;
|
}
|
}
|
|
|
#define D(N) typedef struct { char x[N]; } A##N;
|
#define D(N) typedef struct { char x[N]; } A##N;
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
|
|
void foo (int size, ...)
|
void foo (int size, ...)
|
{
|
{
|
#define D(N) A##N a##N;
|
#define D(N) A##N a##N;
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
va_list ap;
|
va_list ap;
|
int i;
|
int i;
|
|
|
if (size != 21)
|
if (size != 21)
|
abort ();
|
abort ();
|
va_start (ap, size);
|
va_start (ap, size);
|
#define D(N) \
|
#define D(N) \
|
a##N = va_arg (ap, typeof (a##N)); \
|
a##N = va_arg (ap, typeof (a##N)); \
|
for (i = 0; i < N; i++) \
|
for (i = 0; i < N; i++) \
|
bar (N, a##N.x[i]);
|
bar (N, a##N.x[i]);
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
va_end (ap);
|
va_end (ap);
|
}
|
}
|
|
|
int main (void)
|
int main (void)
|
{
|
{
|
#define D(N) A##N a##N;
|
#define D(N) A##N a##N;
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
int i;
|
int i;
|
|
|
#define D(N) \
|
#define D(N) \
|
for (i = 0; i < N; i++) \
|
for (i = 0; i < N; i++) \
|
a##N.x[i] = i ^ (N << 3);
|
a##N.x[i] = i ^ (N << 3);
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
|
|
foo (21
|
foo (21
|
#define D(N) , a##N
|
#define D(N) , a##N
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15)
|
D(16) D(31) D(32) D(35) D(72)
|
D(16) D(31) D(32) D(35) D(72)
|
#undef D
|
#undef D
|
);
|
);
|
exit (0);
|
exit (0);
|
}
|
}
|
|
|