summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c b/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c
new file mode 100644
index 000000000..88667a461
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c
@@ -0,0 +1,20 @@
+/* This testcase triggered an attempt to reload a byte value into an
+ address register. */
+extern volatile unsigned char x[];
+
+#define DECLARE(I) orig##I, inc##I
+#define READ(I) orig##I = x[I]
+#define INC(I) inc##I = orig##I + 1
+#define WRITE1(I) x[I] = orig##I
+#define WRITE2(I) x[I] = inc##I
+
+#define REPEAT(X) X(0), X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8)
+
+void foo (void)
+{
+ unsigned char REPEAT (DECLARE);
+ REPEAT (READ);
+ REPEAT (INC);
+ REPEAT (WRITE1);
+ REPEAT (WRITE2);
+}