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); +}
