diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2002-05-27 20:19:53 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2002-05-27 20:19:53 +0000 |
commit | ef72b1d3196beb186a4ec6ca056ad62b4afb78e4 (patch) | |
tree | 243f8a5fbbf0a61348c0792038282b2de4bdb2cb /gcc | |
parent | 630363b4354eb2db2a1451c4c4c97529c42f2021 (diff) | |
download | gcc-ef72b1d3196beb186a4ec6ca056ad62b4afb78e4.zip gcc-ef72b1d3196beb186a4ec6ca056ad62b4afb78e4.tar.gz gcc-ef72b1d3196beb186a4ec6ca056ad62b4afb78e4.tar.bz2 |
* gcc.c-torture/execute/pure-1.c: New test.
From-SVN: r53937
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pure-1.c | 90 |
2 files changed, 94 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b510c04..2121151 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..a766b93 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pure-1.c @@ -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__ */ |