https://gcc.gnu.org/g:24f4191e49aacce1d980be6fa8462fcc335f3549

commit r16-6254-g24f4191e49aacce1d980be6fa8462fcc335f3549
Author: Kaz Kojima <[email protected]>
Date:   Fri Sep 20 18:36:22 2024 +0900

    SH: A test case for wrong-code with -mlra PR55212 c#192 / c#248 / att. 59102
    
    gcc/testsuite/ChangeLog:
    
            PR target/55212
            * gcc.target/sh/pr55212-c248.c: New test.

Diff:
---
 gcc/testsuite/gcc.target/sh/pr55212-c248.c | 31 ++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gcc/testsuite/gcc.target/sh/pr55212-c248.c 
b/gcc/testsuite/gcc.target/sh/pr55212-c248.c
new file mode 100644
index 000000000000..94fd6afaab3c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr55212-c248.c
@@ -0,0 +1,31 @@
+/* { dg-do run }  */
+/* { dg-options "-O2 -m4 -mlra -ffixed-r7 -ffixed-r8 -ffixed-r9 -ffixed-r10 
-ffixed-r11 -ffixed-r12 -ffixed-r13" } */
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct { int c[64]; } obj;
+obj obj0;
+obj obj1;
+
+void __attribute__ ((noinline))
+bar (int a, int b, int c, int d, obj *q)
+{
+  if (q->c[0] != 0x12345678 || q->c[1] != 0xdeadbeef) 
+    abort ();
+}
+
+void foo (obj *p)
+{
+  obj bobj;
+  bobj = *p;
+  bar (0, 0, 0, 0, &bobj);
+}
+
+int
+main ()
+{
+  obj0.c[0] = 0x12345678;
+  obj0.c[1] = 0xdeadbeef;
+  foo (&obj0);
+  exit (0);
+}

Reply via email to