From 9b691456bb847a7343b891dba9628e3b8d460727 Mon Sep 17 00:00:00 2001 From: hp Date: Wed, 23 Feb 2005 22:20:48 +0000 Subject: [PATCH] PR tree-optimization/20100 * gcc.c-torture/execute/pr20100-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95474 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 5 ++ gcc/testsuite/gcc.c-torture/execute/pr20100-1.c | 76 +++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr20100-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 199acc1..ed9f719 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-02-23 Hans-Peter Nilsson + + PR tree-optimization/20100 + * gcc.c-torture/execute/pr20100-1.c: New test. + 2005-02-23 Tobias Schl"uter * gfortran.dg/implicit_3.f90: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/pr20100-1.c b/gcc/testsuite/gcc.c-torture/execute/pr20100-1.c new file mode 100644 index 0000000..8782edc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr20100-1.c @@ -0,0 +1,76 @@ +/* PR tree-optimization/20100 + Pure function being treated as const. + Author: Hans-Peter Nilsson. */ + +static unsigned short g = 0; +static unsigned short p = 0; +unsigned char e; + +static unsigned short +next_g (void) +{ + return g == e - 1 ? 0 : g + 1; +} + +static unsigned short +curr_p (void) +{ + return p; +} + +static unsigned short +inc_g (void) +{ + return g = next_g (); +} + +static unsigned short +curr_g (void) +{ + return g; +} + +static char +ring_empty (void) +{ + if (curr_p () == curr_g ()) + return 1; + else + return 0; +} + +char +frob (unsigned short a, unsigned short b) +{ + g = a; + p = b; + inc_g (); + return ring_empty (); +} + +unsigned short +get_n (void) +{ + unsigned short n = 0; + unsigned short org_g; + org_g = curr_g (); + while (!ring_empty () && n < 5) + { + inc_g (); + n++; + } + + return n; +} + +void abort (void); +void exit (int); +int main (void) +{ + e = 3; + if (frob (0, 2) != 0 || g != 1 || p != 2 || e != 3 + || get_n () != 1 + || g != 2 || p != 2) + abort (); + exit (0); +} -- 2.7.4