OSDN Git Service

New test case (2.95.2 miscompilation)
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Sep 2001 16:21:29 +0000 (16:21 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Sep 2001 16:21:29 +0000 (16:21 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45505 138bc75d-0d04-0410-961f-82ee72b054a4

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

diff --git a/gcc/testsuite/gcc.c-torture/execute/20010910-1.c b/gcc/testsuite/gcc.c-torture/execute/20010910-1.c
new file mode 100644 (file)
index 0000000..185e29d
--- /dev/null
@@ -0,0 +1,59 @@
+/* Test case contributed by Ingo Rohloff <rohloff@in.tum.de>.
+   Code distilled from Linux kernel.  */
+
+/* Compile this program with a gcc-2.95.2 using
+   "gcc -O2" and run it. The result will be that
+   rx_ring[1].next == 0   (it should be == 14)
+   and
+   ep.skbuff[4] == 5      (it should be 0)
+*/
+
+extern void abort(void);
+
+struct epic_rx_desc 
+{
+  unsigned int next;
+};
+
+struct epic_private 
+{
+  struct epic_rx_desc *rx_ring;
+  unsigned int rx_skbuff[5];
+};
+
+static void epic_init_ring(struct epic_private *ep)
+{
+  int i;
+
+  for (i = 0; i < 5; i++) 
+  {
+    ep->rx_ring[i].next = 10 + (i+1)*2;
+    ep->rx_skbuff[i] = 0;
+  }
+  ep->rx_ring[i-1].next = 10;
+}
+
+static int check_rx_ring[5] = { 12,14,16,18,10 };
+
+int main(void)
+{
+  struct epic_private ep;
+  struct epic_rx_desc rx_ring[5];
+  int i;
+
+  for (i=0;i<5;i++)
+  {
+    rx_ring[i].next=0;
+    ep.rx_skbuff[i]=5;
+  }
+  
+  ep.rx_ring=rx_ring;
+  epic_init_ring(&ep);
+  
+  for (i=0;i<5;i++)
+  {
+    if ( rx_ring[i].next != check_rx_ring[i] ) abort();
+    if ( ep.rx_skbuff[i] != 0 ) abort();
+  }
+  return 0;
+}