(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr35691-6.c
       1  /* PR middle-end/35691 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2" } */
       4  
       5  __attribute__((noinline, noclone)) int
       6  foo (int *p, unsigned long long *q)
       7  {
       8    int p0 = p[0], p10 = p[10], p12 = p[12], p32 = p[32], p77 = p[77], p85 = p[85], p86 = p[86], p97 = p[97], p98 = p[98];
       9    unsigned long long q0 = q[0], q10 = q[10], q12 = q[12], q32 = q[32], q77 = q[77], q85 = q[85], q86 = q[86], q97 = q[97], q98 = q[98];
      10    return p0 == 0 && q0 == -1 && p10 == 0 && q10 == -1 && p12 == 0 && q12 == -1
      11  	 && p32 == 0 && q32 == -1 && p77 == 0 && q77 == -1 && p85 == 0 && q85 == -1
      12  	 && p86 == 0 && q86 == -1 && p97 == 0 && q97 == -1 && p98 == 0 && q98 == -1;
      13  }
      14  
      15  __attribute__((noinline, noclone)) int
      16  bar (int *p, unsigned long long *q)
      17  {
      18    int p0 = p[0], p10 = p[10], p12 = p[12], p32 = p[32], p77 = p[77], p85 = p[85], p86 = p[86], p97 = p[97], p98 = p[98];
      19    unsigned long long q0 = q[0], q10 = q[10], q12 = q[12], q32 = q[32], q77 = q[77], q85 = q[85], q86 = q[86], q97 = q[97], q98 = q[98];
      20    return p0 != 0 | q0 != -1 | p10 != 0 | q10 != -1 | p12 != 0 | q12 != -1
      21  	 | p32 != 0 | q32 != -1 | p77 != 0 | q77 != -1 | p85 != 0 | q85 != -1
      22  	 | p86 != 0 | q86 != -1 | p97 != 0 | q97 != -1 | p98 != 0 | q98 != -1;
      23  }
      24  
      25  int p[100];
      26  unsigned long long q[100];
      27  
      28  int
      29  main ()
      30  {
      31    int i;
      32    for (i = 0; i < 100; i++)
      33      {
      34        p[i] = 0;
      35        q[i] = -1;
      36      }
      37    asm volatile ("" : : "g" (p), "g" (q) : "memory");
      38    if (foo (p, q) != 1 || bar (p, q) != 0)
      39      __builtin_abort ();
      40    for (i = 0; i < 100; i++)
      41      {
      42        int f1, b1, f2, b2;
      43        p[i] = 1;
      44        f1 = foo (p, q);
      45        b1 = bar (p, q);
      46        p[i] = 0;
      47        q[i] = 0;
      48        f2 = foo (p, q);
      49        b2 = bar (p, q);
      50        q[i] = -1;
      51        switch (i)
      52  	{
      53  	case 0:
      54  	case 10:
      55  	case 12:
      56  	case 32:
      57  	case 77:
      58  	case 85:
      59  	case 86:
      60  	case 97:
      61  	case 98:
      62  	  if (f1 != 0 || b1 != 1 || f2 != 0 || b2 != 1)
      63  	    __builtin_abort ();
      64  	  break;
      65  	default:
      66  	  if (f1 != 1 || b1 != 0 || f2 != 1 || b2 != 0)
      67  	    __builtin_abort ();
      68  	  break;
      69  	}
      70      }
      71    return 0;
      72  }