1  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
       2  #define REVERSE_SSO __attribute__((scalar_storage_order("big-endian")));
       3  #else
       4  #define REVERSE_SSO __attribute__((scalar_storage_order("little-endian")));
       5  #endif
       6  
       7  struct S {
       8    int i : 24;
       9    char c1 : 1;
      10    char c2 : 1;
      11    char c3 : 1;
      12    char c4 : 1;
      13    char c5 : 1;
      14    char c6 : 1;
      15    char c7 : 1;
      16    char c8 : 1;
      17  } REVERSE_SSO;
      18  
      19  int main (void)
      20  {
      21    struct S s0 = { 1193046, 1, 1, 1, 1, 1, 1, 1, 1 };
      22    char *p = (char *) &s0;
      23  
      24  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
      25    if (*p != 18)
      26      __builtin_abort ();
      27  #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
      28    if (*p != 86)
      29      __builtin_abort ();
      30  #endif
      31  
      32    return 0;
      33  }