(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
guality/
pr43077-1.c
       1  /* PR debug/43077 */
       2  /* { dg-do run } */
       3  /* { dg-options "-g -fno-ipa-icf" } */
       4  
       5  int varb;
       6  
       7  int __attribute__((noinline))
       8  fn1 (void)
       9  {
      10    int vara = (varb == 3);		/* { dg-final { gdb-test .+1 "vara" "0" } } */
      11    asm volatile ("" : : "g" (vara));	/* { dg-final { gdb-test . "varb" "2" } } */
      12    return 0;
      13  }
      14  
      15  int __attribute__((noinline))
      16  fn2 (void)
      17  {
      18    int vara = (varb == 3);		/* { dg-final { gdb-test .+1 "vara" "1" } } */
      19    asm volatile ("" : : "g" (vara));	/* { dg-final { gdb-test . "varb" "3" } } */
      20    return 0;
      21  }
      22  
      23  int __attribute__((noinline))
      24  foo (unsigned long *p, unsigned long *q)
      25  {
      26    int ret;
      27    asm volatile ("" : "=r" (ret), "=r" (*p), "=r" (*q) : "0" (1), "1" (2l), "2" (3l));
      28    return ret;
      29  }
      30  
      31  int __attribute__((noinline))
      32  fn3 (void)
      33  {
      34    unsigned long a = 0, b = 0, c = 0;
      35    a = foo (&b, &c);
      36  					/* { dg-final { gdb-test .+6 "a" "1" } } */
      37  					/* { dg-final { gdb-test .+5 "b" "2" } } */
      38  					/* { dg-final { gdb-test .+4 "c" "3" } } */
      39    unsigned long vara = a;		/* { dg-final { gdb-test .+3 "vara" "1" } } */
      40    unsigned long varb = b;		/* { dg-final { gdb-test .+2 "varb" "2" } } */
      41    unsigned long varc = c;		/* { dg-final { gdb-test .+1 "varc" "3" } } */
      42    asm volatile ("" : : "g" (vara), "g" (varb), "g" (varc));
      43    return a;
      44  }
      45  
      46  int
      47  main (void)
      48  {
      49    asm volatile ("" : "=r" (varb) : "0" (2));
      50    fn1 ();
      51    asm volatile ("" : "=r" (varb) : "0" (3));
      52    fn2 ();
      53    fn3 ();
      54    return 0;
      55  }