OSDN Git Service

2007-05-09 Andreas Krebbel <krebbel1@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 May 2007 07:40:52 +0000 (07:40 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 May 2007 07:40:52 +0000 (07:40 +0000)
* gcc.dg/20070507-1.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124567 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/20070507-1.c [new file with mode: 0644]

index e2f0a35..57b76d9 100644 (file)
@@ -1,3 +1,7 @@
+2007-05-09  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * gcc.dg/20070507-1.c: New testcase.
+
 2007-05-08  Chao-ying Fu  <fu@mips.com>
 
        * gcc.target/mips/msub-1.c, gcc.target/mips/msub-2.c,
diff --git a/gcc/testsuite/gcc.dg/20070507-1.c b/gcc/testsuite/gcc.dg/20070507-1.c
new file mode 100644 (file)
index 0000000..5d29d07
--- /dev/null
@@ -0,0 +1,103 @@
+/* This failed on s390x due to bug in loop.c.
+   loop.c failed to remove a REG_EQUAL note when
+   hoisting an insn from a loop body.  */
+
+/* { dg-options "-O3 -fPIC" } */
+/* { dg-do run } */
+
+typedef __SIZE_TYPE__ size_t;
+int memcmp(const void *s1, const void *s2, size_t n);
+
+typedef struct
+{
+  char name[30];
+  int a;
+} LOCAL;
+
+int global = 0;
+int sy = 1;
+int subroutine_offset;
+
+LOCAL local = { "local", 0 };
+LOCAL keywords = { "keywords", 1 };
+int local_table = 0;
+int keywords_table = 0;
+
+void __attribute__((noinline)) bar (char *p_buffer)
+{
+  p_buffer[255] = 1;
+}
+
+int __attribute__((noinline)) foo (char *p_str1)
+{
+  global = 1;
+  return 1;
+}
+
+int __attribute__((noinline)) loop_next (int *p_table, char *p_table_head)
+{
+  static loop_next = 0;
+
+  if (loop_next == 1)
+    return 1;
+
+  loop_next = 1;
+  return 0;
+}
+
+int
+main ()
+{
+  char buffer[256];
+  int ende = 0;
+  int index;
+  int local_base = 2;
+
+  keywords.a = 1;
+  for (sy = 0;; sy++)
+    {
+      for (index = 1;;)
+       {
+         bar (buffer);
+         if (buffer[sy] != 0)
+           {
+             ende = 1;
+             break;
+           };
+         if (foo (buffer))
+           {
+             keywords.a += index - 1;
+             break;
+           }
+         index++;
+       }
+      if (ende)
+       break;
+    }
+
+  subroutine_offset = 0;
+
+  for (;;)
+    {
+      if (loop_next (&keywords_table, (char*)&keywords))
+       break;
+
+      if ((!memcmp (keywords.name, "+++", 3)))
+       local_base = 100;
+      else
+       local_base = 0;
+
+      if ((!memcmp (keywords.name, "+++", 3)))
+       subroutine_offset += local_table;
+
+      for (;;)
+       {
+         if (loop_next (&local_table, (char*)&local))
+           break;;
+         if ((local.a == 0))
+           continue;;
+         foo (local.name);
+       }
+    }
+  return 0;
+}