aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c
new file mode 100644
index 000000000..d29c6fa1a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20100430-1.c
@@ -0,0 +1,51 @@
+/* This used to generate unaligned accesses at -O2 because of IVOPTS. */
+
+struct packed_struct
+{
+ struct packed_struct1
+ {
+ unsigned char cc11;
+ unsigned char cc12;
+ } __attribute__ ((packed)) pst1;
+ struct packed_struct2
+ {
+ unsigned char cc21;
+ unsigned char cc22;
+ unsigned short ss[104];
+ unsigned char cc23[13];
+ } __attribute__ ((packed)) pst2[4];
+} __attribute__ ((packed));
+
+typedef struct
+{
+ int ii;
+ struct packed_struct buf;
+} info_t;
+
+static unsigned short g;
+
+static void __attribute__((noinline))
+dummy (unsigned short s)
+{
+ g = s;
+}
+
+static int
+foo (info_t *info)
+{
+ int i, j;
+
+ for (i = 0; i < info->buf.pst1.cc11; i++)
+ for (j = 0; j < info->buf.pst2[i].cc22; j++)
+ dummy (info->buf.pst2[i].ss[j]);
+
+ return 0;
+}
+
+int main(void)
+{
+ info_t info;
+ info.buf.pst1.cc11 = 2;
+ info.buf.pst2[0].cc22 = info.buf.pst2[1].cc22 = 8;
+ return foo (&info);
+}