(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr56997-2.c
       1  /* Test volatile access to unaligned field.  */
       2  /* { dg-do run } */
       3  /* { dg-require-effective-target size32plus } */
       4  /* { dg-options "-fstrict-volatile-bitfields" } */
       5  
       6  extern void abort (void);
       7  
       8  #define test_type unsigned int
       9  #define MAGIC 0x1020304u
      10  
      11  typedef struct s{
      12   unsigned char Prefix;
      13   test_type Type;
      14  }__attribute((__packed__)) ss;
      15  
      16  volatile ss v;
      17  ss g;
      18  
      19  void __attribute__((noinline))
      20  foo (test_type u)
      21  {
      22    v.Type = u;
      23  }
      24  
      25  test_type __attribute__((noinline))
      26  bar (void)
      27  {
      28    return v.Type;
      29  }
      30  
      31  int main()
      32  {
      33    test_type temp;
      34    foo(MAGIC);
      35    __builtin_memcpy(&g, (void *)&v, sizeof(g));
      36    if (g.Type != MAGIC)
      37      abort ();
      38  
      39    g.Type = MAGIC;
      40    __builtin_memcpy((void *)&v, &g, sizeof(v));
      41    temp = bar();
      42    if (temp != MAGIC)
      43      abort ();
      44    return 0;
      45  }