1  /* { dg-do compile } */
       2  /* { dg-options "-O0 -dA -gbtf -mco-re" } */
       3  
       4  struct S {
       5    int a;
       6    int b;
       7    char c;
       8  };
       9  
      10  union U {
      11    unsigned int u;
      12    int i;
      13    unsigned char uc[4];
      14    signed char ic[4];
      15  };
      16  
      17  struct S my_s;
      18  union U my_u;
      19  
      20  unsigned long ula[8];
      21  
      22  #define _(x) (__builtin_preserve_access_index (x))
      23  
      24  void
      25  func (void)
      26  {
      27    /* 1 */
      28    int b = _(my_s.b);
      29  
      30    /* 2 */
      31    char c = _(my_s.c);
      32  
      33    /* 2:3 */
      34    unsigned char uc = _(my_u.uc[3]);
      35  
      36    /* 6 */
      37    unsigned long ul = _(ula[6]);
      38  }
      39  
      40  char
      41  s_ptr (struct S *ps)
      42  {
      43    /* 0:2 */
      44    char x = _(ps->c);
      45    return x;
      46  }
      47  
      48  unsigned char
      49  u_ptr (union U *pu)
      50  {
      51    /* 0:2:3 */
      52    unsigned char x = _(pu->uc[3]);
      53    return x;
      54  }
      55  
      56  /* { dg-final { scan-assembler-times "ascii \"1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      57  /* { dg-final { scan-assembler-times "ascii \"2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      58  /* { dg-final { scan-assembler-times "ascii \"2:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      59  /* { dg-final { scan-assembler-times "ascii \"6.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      60  /* { dg-final { scan-assembler-times "ascii \"0:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      61  /* { dg-final { scan-assembler-times "ascii \"0:2:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      62  
      63  /* { dg-final { scan-assembler-times "bpfcr_type" 6 } } */
      64  /* { dg-final { scan-assembler-times "\[\t \]0x6c\[\t \]+\[^\n\]*core_relo_len" 1 } } */