(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
20030613-1.c
       1  /* PR optimization/10955 */
       2  /* Originator: <heinrich.brand@fujitsu-siemens.com> */
       3  
       4  /* This used to fail on SPARC32 at -O3 because the loop unroller
       5     wrongly thought it could eliminate a pseudo in a loop, while
       6     the pseudo was used outside the loop.  */
       7  
       8  extern void abort(void);
       9  
      10  #define COMPLEX struct CS
      11  
      12  COMPLEX {
      13    long x;
      14    long y;
      15  };
      16  
      17  
      18  static COMPLEX CCID (COMPLEX x)
      19  {
      20    COMPLEX a;
      21  
      22    a.x = x.x;
      23    a.y = x.y;
      24  
      25    return a;
      26  }
      27  
      28  
      29  static COMPLEX CPOW (COMPLEX x, int y)
      30  {
      31    COMPLEX a;
      32    a = x;
      33  
      34    while (--y > 0)
      35      a=CCID(a);
      36  
      37    return a;
      38  }
      39  
      40  
      41  static int c5p (COMPLEX x)
      42  {
      43    COMPLEX a,b;
      44    a = CPOW (x, 2);
      45    b = CCID( CPOW(a,2) );
      46      
      47    return (b.x == b.y); 
      48  }
      49  
      50  
      51  int main (void)
      52  {
      53    COMPLEX  x;  
      54  
      55    x.x = -7;
      56    x.y = -7;
      57  
      58    if (!c5p(x))
      59      abort();
      60  
      61    return 0;
      62  }