(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
pr27285.c
       1  /* PR tree-optimization/27285 */
       2  
       3  extern void abort (void);
       4  
       5  struct S { unsigned char a, b, c, d[16]; };
       6  
       7  void __attribute__ ((noinline))
       8  foo (struct S *x, struct S *y)
       9  {
      10    int a, b;
      11    unsigned char c, *d, *e;
      12  
      13    b = x->b;
      14    d = x->d;
      15    e = y->d;
      16    a = 0;
      17    while (b)
      18      {
      19        if (b >= 8)
      20  	{
      21  	  c = 0xff;
      22  	  b -= 8;
      23  	}
      24        else
      25  	{
      26  	  c = 0xff << (8 - b);
      27  	  b = 0;
      28  	}
      29  
      30        e[a] = d[a] & c;
      31        a++;
      32      }
      33  }
      34  
      35  int
      36  main (void)
      37  {
      38    struct S x = { 0, 25, 0, { 0xaa, 0xbb, 0xcc, 0xdd }};
      39    struct S y = { 0, 0, 0, { 0 }};
      40  
      41    foo (&x, &y);
      42    if (x.d[0] != y.d[0] || x.d[1] != y.d[1]
      43        || x.d[2] != y.d[2] || (x.d[3] & 0x80) != y.d[3])
      44      abort ();
      45     return 0;
      46  }