(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
20010910-1.c
       1  /* Test case contributed by Ingo Rohloff <rohloff@in.tum.de>.
       2     Code distilled from Linux kernel.  */
       3  
       4  /* Compile this program with a gcc-2.95.2 using
       5     "gcc -O2" and run it. The result will be that
       6     rx_ring[1].next == 0   (it should be == 14)
       7     and
       8     ep.skbuff[4] == 5      (it should be 0)
       9  */
      10  
      11  extern void abort(void);
      12  
      13  struct epic_rx_desc 
      14  {
      15    unsigned int next;
      16  };
      17  
      18  struct epic_private 
      19  {
      20    struct epic_rx_desc *rx_ring;
      21    unsigned int rx_skbuff[5];
      22  };
      23  
      24  static void epic_init_ring(struct epic_private *ep)
      25  {
      26    int i;
      27  
      28    for (i = 0; i < 5; i++) 
      29    {
      30      ep->rx_ring[i].next = 10 + (i+1)*2;
      31      ep->rx_skbuff[i] = 0;
      32    }
      33    ep->rx_ring[i-1].next = 10;
      34  }
      35  
      36  static int check_rx_ring[5] = { 12,14,16,18,10 };
      37  
      38  int main(void)
      39  {
      40    struct epic_private ep;
      41    struct epic_rx_desc rx_ring[5];
      42    int i;
      43  
      44    for (i=0;i<5;i++)
      45    {
      46      rx_ring[i].next=0;
      47      ep.rx_skbuff[i]=5;
      48    }
      49    
      50    ep.rx_ring=rx_ring;
      51    epic_init_ring(&ep);
      52    
      53    for (i=0;i<5;i++)
      54    {
      55      if ( rx_ring[i].next != check_rx_ring[i] ) abort();
      56      if ( ep.rx_skbuff[i] != 0 ) abort();
      57    }
      58    return 0;
      59  }