OSDN Git Service

PR tree-optimization/32772
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Sep 2007 09:44:23 +0000 (09:44 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Sep 2007 09:44:23 +0000 (09:44 +0000)
* gcc.c-torture/compile/20070905-1.c: New test.

PR tree-optimization/32975
* gcc.dg/pr32975.c: New test.

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

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20070905-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr32975.c [new file with mode: 0644]

index 294cf33..7ed4cc7 100644 (file)
@@ -7,6 +7,12 @@
        attributes.
        * g++.dg/ext/va-arg-pack-len-2.C: New test.
 
+       PR tree-optimization/32772
+       * gcc.c-torture/compile/20070905-1.c: New test.
+
+       PR tree-optimization/32975
+       * gcc.dg/pr32975.c: New test.
+
        PR middle-end/28755
        * gcc.dg/pr28755.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/20070905-1.c b/gcc/testsuite/gcc.c-torture/compile/20070905-1.c
new file mode 100644 (file)
index 0000000..5953275
--- /dev/null
@@ -0,0 +1,34 @@
+/* PR tree-optimization/32772 */
+
+struct S
+{
+  unsigned long bits[1];
+};
+
+void f1 (int, unsigned long *);
+int f2 (void);
+int f3 (int, unsigned long *);
+int f4 (int, unsigned long *);
+
+static inline __attribute__ ((always_inline))
+void baz (int x, volatile struct S *y)
+{
+  f1 (x, y->bits);
+}
+
+static int
+bar (int x, struct S *y)
+{
+  int n;
+  if (__builtin_constant_p (x) ? f3 (x, y->bits) : f4 (x, y->bits))
+    baz (x, y);
+  for (n = f2 (); n < 8; n = f2 ())
+    f3 (n, y->bits);
+}
+
+void
+foo (int x, int y)
+{
+  struct S m;
+  while ((y = bar (x, &m)) >= 0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr32975.c b/gcc/testsuite/gcc.dg/pr32975.c
new file mode 100644 (file)
index 0000000..8ddb0d8
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR tree-optimization/32975 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -finline-functions -fipa-cp" } */
+
+static int
+f0 (char *s0, char *s1)
+{
+  return __builtin_strlen (s0) > __builtin_strlen (s1);
+}
+
+int
+f1 (char *s, int j)
+{
+  if (f0 (s, ""))
+    return 1;
+  return j;
+}
+
+void
+f2 (char *s)
+{
+  f1 (s, 0);
+}