(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
sso-17.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  
       4  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
       5  #define REV_ENDIANNESS __attribute__((scalar_storage_order("big-endian")))
       6  #else
       7  #define REV_ENDIANNESS __attribute__((scalar_storage_order("little-endian")))
       8  #endif
       9  
      10  typedef unsigned long long u64;
      11  
      12  union DST {
      13    u64 val;
      14  
      15    struct {
      16      u64 x : 1;
      17      u64 y : 1;
      18      u64 r: 62;
      19    } REV_ENDIANNESS;
      20  } REV_ENDIANNESS;
      21  
      22  
      23  struct SRC {
      24    u64 a;
      25  } REV_ENDIANNESS;
      26  
      27  [[gnu::noipa]]
      28  void foo () {__builtin_abort();}
      29  
      30  [[gnu::noinline]]
      31  int bar(struct SRC *src)
      32  {
      33    union DST dst;
      34    
      35    dst.val = src->a;
      36  
      37    if (dst.y) {
      38      foo();
      39    }
      40    return 0;
      41  }
      42  
      43  int main(void)
      44  {
      45  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
      46    struct SRC t = {-1ull & (~(0x01ull<<62))};
      47  #else
      48    struct SRC t = {-1ull & (~(0x01ull<<1))};
      49  #endif
      50    bar(&t);
      51    return 0;
      52  }