summaryrefslogtreecommitdiff
path: root/support/regression/tests/gcc-torture-execute-struct-cpy-1.c
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/gcc-torture-execute-struct-cpy-1.c
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/gcc-torture-execute-struct-cpy-1.c')
-rw-r--r--support/regression/tests/gcc-torture-execute-struct-cpy-1.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/support/regression/tests/gcc-torture-execute-struct-cpy-1.c b/support/regression/tests/gcc-torture-execute-struct-cpy-1.c
new file mode 100644
index 0000000..b7a858f
--- /dev/null
+++ b/support/regression/tests/gcc-torture-execute-struct-cpy-1.c
@@ -0,0 +1,52 @@
+/*
+struct-cpy-1.c from the execute part of the gcc torture tests.
+*/
+
+#include <testfwk.h>
+
+/* powerpc64-linux gcc miscompiled this due to rs6000.c:expand_block_move
+ not setting mem aliasing info correctly for the code implementing the
+ structure assignment. */
+
+struct termios
+{
+ unsigned int a;
+ unsigned int b;
+ unsigned int c;
+ unsigned int d;
+ unsigned char pad[28];
+};
+
+struct tty_driver
+{
+ unsigned char pad1[38];
+ struct termios t;
+};
+
+#if !(defined(__SDCC_mcs51) && defined(__SDCC_MODEL_SMALL)) && !defined(__SDCC_pdk14) // Lack of memory
+static struct termios zero_t;
+static struct tty_driver pty;
+
+void ini (void)
+{
+ pty.t = zero_t;
+ pty.t.a = 1;
+ pty.t.b = 2;
+ pty.t.c = 3;
+ pty.t.d = 4;
+}
+#endif
+
+void
+testTortureExecute (void)
+{
+#if !(defined(__SDCC_mcs51) && defined(__SDCC_MODEL_SMALL)) && !defined(__SDCC_pdk14) // Lack of memory
+ ini ();
+ if (pty.t.a != 1
+ || pty.t.b != 2
+ || pty.t.c != 3
+ || pty.t.d != 4)
+ ASSERT (0);
+#endif
+ return;
+}