aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c
new file mode 100644
index 000000000..0f83088bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20020227-1.c
@@ -0,0 +1,30 @@
+/* This testcase failed on mmix-knuth-mmixware. Problem was with storing
+ to an unaligned mem:SC, gcc tried doing it by parts from a (concat:SC
+ (reg:SF 293) (reg:SF 294)). */
+
+typedef __complex__ float cf;
+struct x { char c; cf f; } __attribute__ ((__packed__));
+extern void f2 (struct x*);
+extern void f1 (void);
+int
+main (void)
+{
+ f1 ();
+ exit (0);
+}
+
+void
+f1 (void)
+{
+ struct x s;
+ s.f = 1;
+ s.c = 42;
+ f2 (&s);
+}
+
+void
+f2 (struct x *y)
+{
+ if (y->f != 1 || y->c != 42)
+ abort ();
+}