OSDN Git Service

* gcc.c-torture/execute/20020215-1.c: New test.
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Feb 2002 12:21:00 +0000 (12:21 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Feb 2002 12:21:00 +0000 (12:21 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49788 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20020215-1.c [new file with mode: 0644]

index 2cf855f..ffce554 100644 (file)
@@ -1,3 +1,7 @@
+2002-02-15  Richard Sandiford  <rsandifo@redhat.com>
+
+       * gcc.c-torture/execute/20020215-1.c: New test.
+
 2002-02-14  Jakub Jelinek  <jakub@redhat.com>
 
        * g++.dg/dg.exp: Exclude debug subdir, it has its own .exp.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020215-1.c b/gcc/testsuite/gcc.c-torture/execute/20020215-1.c
new file mode 100644 (file)
index 0000000..f1f46d5
--- /dev/null
@@ -0,0 +1,33 @@
+/* Test failed on an architecture that:
+
+   - had 16-bit registers,
+   - passed 64-bit structures in registers,
+   - only allowed SImode values in even numbered registers.
+
+   Before reload, s.i2 in foo() was represented as:
+
+       (subreg:SI (reg:DI 0) 2)
+
+   find_dummy_reload would return (reg:SI 1) for the subreg reload,
+   despite that not being a valid register.  */
+
+struct s
+{
+  short i1;
+  long i2;
+  short i3;
+};
+
+struct s foo (struct s s)
+{
+  s.i2++;
+  return s;
+}
+
+int main ()
+{
+  struct s s = foo ((struct s) { 1000, 2000L, 3000 });
+  if (s.i1 != 1000 || s.i2 != 2001L || s.i3 != 3000)
+    abort ();
+  exit (0);
+}