This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Committed, original test-case for PR 20100


The others were (for instance) using the pure attribute.  See
comment #9 in the PR.  Approved by dnovillo.

Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/ChangeLog,v
retrieving revision 1.5080
retrieving revision 1.5081
diff -c -p -r1.5080 -r1.5081
*** ChangeLog	23 Feb 2005 20:56:55 -0000	1.5080
--- ChangeLog	23 Feb 2005 22:20:43 -0000	1.5081
***************
*** 1,3 ****
--- 1,8 ----
+ 2005-02-23  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR tree-optimization/20100
+ 	* gcc.c-torture/execute/pr20100-1.c: New test.
+ 
  2005-02-23  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
  
  	* gfortran.dg/implicit_3.f90: New test.
--- /dev/null	Tue Oct 29 15:57:07 2002
+++ gcc.c-torture/execute/pr20100-1.c	Wed Feb 23 23:20:48 2005
@@ -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);
+}

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]