]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* gcc.c-torture/execute/pure-1.c: New test.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Mon, 27 May 2002 20:19:53 +0000 (20:19 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Mon, 27 May 2002 20:19:53 +0000 (20:19 +0000)
From-SVN: r53937

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

index b510c04de403e5cfc5892a3d09ed843c1f7bb263..2121151185cbb9d6786968bbd48486119b709c22 100644 (file)
@@ -1,3 +1,7 @@
+2002-05-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.c-torture/execute/pure-1.c: New test.
+
 2002-05-27  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * gcc.dg/cpp/arith-2.c: Remove.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pure-1.c b/gcc/testsuite/gcc.c-torture/execute/pure-1.c
new file mode 100644 (file)
index 0000000..a766b93
--- /dev/null
@@ -0,0 +1,90 @@
+/* Origin: Kaveh Ghazi <ghazi@caip.rutgers.edu> 2002-05-27.  */
+
+/* Use a different function for each test so the link failures
+   indicate which one is broken.  */
+extern void link_error0 (void);
+extern void link_error1 (void);
+extern void link_error2 (void);
+extern void link_error3 (void);
+extern void link_error4 (void);
+extern void link_error5 (void);
+extern void link_error6 (void);
+extern void link_error7 (void);
+
+extern int i;
+
+extern int func0 (int) __attribute__ ((__pure__));
+extern int func1 (int) __attribute__ ((__const__));
+/* GCC should automatically detect attributes for these functions.
+   Don't allow -O3 to inline them.  */
+#define ANI __attribute__ ((__noinline__))
+static int ANI func2 (int a) { return i + a; } /* pure */
+static int ANI func3 (int a) { return a * 3; } /* const */
+static int ANI func4 (int a) { return func0(a) + a; } /* pure */
+static int ANI func5 (int a) { return a + func1(a); } /* const */
+static int ANI func6 (int a) { return func2(a) + a; } /* pure */
+static int ANI func7 (int a) { return a + func3(a); } /* const */
+
+int main ()
+{
+  int i[10], r;
+
+  i[0] = 0;
+  r = func0(0);
+  if (i[0])
+    link_error0();
+
+  i[1] = 0;
+  r = func1(0);
+  if (i[1])
+    link_error1();
+
+  i[2] = 0;
+  r = func2(0);
+  if (i[2])
+    link_error2();
+
+  i[3] = 0;
+  r = func3(0);
+  if (i[3])
+    link_error3();
+
+  i[4] = 0;
+  r = func4(0);
+  if (i[4])
+    link_error4();
+
+  i[5] = 0;
+  r = func5(0);
+  if (i[5])
+    link_error5();
+
+  i[6] = 0;
+  r = func6(0);
+  if (i[6])
+    link_error6();
+
+  i[7] = 0;
+  r = func7(0);
+  if (i[7])
+    link_error7();
+
+  return r;
+}
+
+int func0 (int a) { return a - i; } /* pure */
+int func1 (int a) { return a - a; } /* const */
+
+int i = 2;
+
+#ifndef __OPTIMIZE__
+/* Avoid link failures when not optimizing. */
+void link_error0() {}
+void link_error1() {}
+void link_error2() {}
+void link_error3() {}
+void link_error4() {}
+void link_error5() {}
+void link_error6() {}
+void link_error7() {}
+#endif /* ! __OPTIMIZE__ */