summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c')
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c b/gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
new file mode 100644
index 000000000..fe1b09577
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/compat/struct-by-value-4_y.c
@@ -0,0 +1,162 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+#ifdef SKIP_VA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+typedef struct { char c; } Sc;
+typedef struct { short s; } Ss;
+typedef struct { int i; } Si;
+typedef struct { short s; char c; } Ssc;
+typedef struct { int i; short s; } Sis;
+typedef struct { char c; short s; int i; } Scsi;
+typedef struct { char c; int i; short s; } Scis;
+
+void initSc (Sc *p, int i) { p->c = i/16; }
+void initSs (Ss *p, int i) { p->s = i; }
+void initSi (Si *p, int i) { p->i = i; }
+void initSsc (Ssc *p, int i) { p->s = i; p->c = (i/16)+1; }
+void initSis (Sis *p, int i) { p->i = i; p->s = i+1; }
+void initScsi (Scsi *p, int i) { p->c = i/16; p->s = i+1; p->i = i+2; }
+void initScis (Scis *p, int i) { p->c = i/16; p->i = i+1; p->s = i+2; }
+
+#define T(N, TYPE) \
+struct S##TYPE##N { TYPE i[N]; }; \
+ \
+extern struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \
+extern struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \
+extern struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \
+extern struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \
+extern struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \
+extern struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \
+extern struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \
+extern struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \
+ \
+extern void check##TYPE (TYPE x, int i); \
+extern void \
+check##TYPE##N (struct S##TYPE##N *p, int i); \
+ \
+void \
+checkg##TYPE##N (void) \
+{ \
+ check##TYPE##N ( &g1s##TYPE##N, 1*16); \
+ check##TYPE##N ( &g2s##TYPE##N, 2*16); \
+ check##TYPE##N ( &g3s##TYPE##N, 3*16); \
+ check##TYPE##N ( &g4s##TYPE##N, 4*16); \
+ check##TYPE##N ( &g5s##TYPE##N, 5*16); \
+ check##TYPE##N ( &g6s##TYPE##N, 6*16); \
+ check##TYPE##N ( &g7s##TYPE##N, 7*16); \
+ check##TYPE##N ( &g8s##TYPE##N, 8*16); \
+ check##TYPE##N ( &g9s##TYPE##N, 9*16); \
+ check##TYPE##N (&g10s##TYPE##N, 10*16); \
+ check##TYPE##N (&g11s##TYPE##N, 11*16); \
+ check##TYPE##N (&g12s##TYPE##N, 12*16); \
+ check##TYPE##N (&g13s##TYPE##N, 13*16); \
+ check##TYPE##N (&g14s##TYPE##N, 14*16); \
+ check##TYPE##N (&g15s##TYPE##N, 15*16); \
+ check##TYPE##N (&g16s##TYPE##N, 16*16); \
+} \
+ \
+void \
+test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
+ struct S##TYPE##N s3, struct S##TYPE##N s4, \
+ struct S##TYPE##N s5, struct S##TYPE##N s6, \
+ struct S##TYPE##N s7, struct S##TYPE##N s8, \
+ struct S##TYPE##N s9, struct S##TYPE##N s10, \
+ struct S##TYPE##N s11, struct S##TYPE##N s12, \
+ struct S##TYPE##N s13, struct S##TYPE##N s14, \
+ struct S##TYPE##N s15, struct S##TYPE##N s16) \
+{ \
+ check##TYPE##N (&s1, 1*16); \
+ check##TYPE##N (&s2, 2*16); \
+ check##TYPE##N (&s3, 3*16); \
+ check##TYPE##N (&s4, 4*16); \
+ check##TYPE##N (&s5, 5*16); \
+ check##TYPE##N (&s6, 6*16); \
+ check##TYPE##N (&s7, 7*16); \
+ check##TYPE##N (&s8, 8*16); \
+ check##TYPE##N (&s9, 9*16); \
+ check##TYPE##N (&s10, 10*16); \
+ check##TYPE##N (&s11, 11*16); \
+ check##TYPE##N (&s12, 12*16); \
+ check##TYPE##N (&s13, 13*16); \
+ check##TYPE##N (&s14, 14*16); \
+ check##TYPE##N (&s15, 15*16); \
+ check##TYPE##N (&s16, 16*16); \
+} \
+ \
+void \
+testva##TYPE##N (int n, ...) \
+{ \
+ int i; \
+ va_list ap; \
+ if (test_va) \
+ { \
+ va_start (ap, n); \
+ for (i = 0; i < n; i++) \
+ { \
+ struct S##TYPE##N t = va_arg (ap, struct S##TYPE##N); \
+ check##TYPE##N (&t, (i+1)*16); \
+ } \
+ va_end (ap); \
+ } \
+}
+
+#ifndef SKIP_ZERO_ARRAY
+T(0, Sc)
+#endif
+T(1, Sc)
+T(2, Sc)
+T(3, Sc)
+T(4, Sc)
+T(5, Sc)
+T(6, Sc)
+T(7, Sc)
+T(8, Sc)
+T(9, Sc)
+T(10, Sc)
+T(11, Sc)
+T(12, Sc)
+T(13, Sc)
+T(14, Sc)
+T(15, Sc)
+#ifndef SKIP_ZERO_ARRAY
+T(0, Ss)
+#endif
+T(1, Ss)
+T(2, Ss)
+T(3, Ss)
+T(4, Ss)
+T(5, Ss)
+T(6, Ss)
+T(7, Ss)
+T(8, Ss)
+T(9, Ss)
+T(10, Ss)
+T(11, Ss)
+T(12, Ss)
+T(13, Ss)
+T(14, Ss)
+T(15, Ss)
+#ifndef SKIP_ZERO_ARRAY
+T(0, Si)
+#endif
+T(1, Si)
+T(2, Si)
+T(3, Si)
+T(4, Si)
+T(5, Si)
+T(6, Si)
+T(7, Si)
+T(8, Si)
+T(9, Si)
+T(10, Si)
+T(11, Si)
+T(12, Si)
+T(13, Si)
+T(14, Si)
+T(15, Si)