From: Kaveh R. Ghazi Date: Mon, 27 May 2002 20:19:53 +0000 (+0000) Subject: * gcc.c-torture/execute/pure-1.c: New test. X-Git-Tag: releases/gcc-3.3.0~4775 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef72b1d3196beb186a4ec6ca056ad62b4afb78e4;p=thirdparty%2Fgcc.git * gcc.c-torture/execute/pure-1.c: New test. From-SVN: r53937 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b510c04de403..2121151185cb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-05-27 Kaveh R. Ghazi + + * gcc.c-torture/execute/pure-1.c: New test. + 2002-05-27 Neil Booth * 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 index 000000000000..a766b93a9fda --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pure-1.c @@ -0,0 +1,90 @@ +/* Origin: Kaveh Ghazi 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__ */