modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/sync-3.c (about)

     1  /* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
     2  /* { dg-options "-ffat-lto-objects" } */
     3  
     4  /* Validate that each of the __sync builtins compiles.  This won't 
     5     necessarily link, since the target might not support the builtin,
     6     so this may result in external library calls.  */
     7  
     8  void test_op_ignore (void)
     9  {
    10  signed char sc[2];
    11  unsigned char uc[2];
    12  signed short ss[2];
    13  unsigned short us[2];
    14  signed int si[2];
    15  unsigned int ui[2];
    16  signed long sl[2];
    17  unsigned long ul[2];
    18  signed long long sll[2];
    19  unsigned long long ull[2];
    20    (void) __sync_fetch_and_add (&sc[1], -1);
    21    (void) __sync_fetch_and_add (&uc[1], -1);
    22    (void) __sync_fetch_and_add (&ss[1], -1);
    23    (void) __sync_fetch_and_add (&us[1], -1);
    24    (void) __sync_fetch_and_add (&si[1], -1);
    25    (void) __sync_fetch_and_add (&ui[1], -1);
    26    (void) __sync_fetch_and_add (&sl[1], -1);
    27    (void) __sync_fetch_and_add (&ul[1], -1);
    28    (void) __sync_fetch_and_add (&sll[1], -1);
    29    (void) __sync_fetch_and_add (&ull[1], -1);
    30  
    31    (void) __sync_fetch_and_sub (&sc[1], -1);
    32    (void) __sync_fetch_and_sub (&uc[1], -1);
    33    (void) __sync_fetch_and_sub (&ss[1], -1);
    34    (void) __sync_fetch_and_sub (&us[1], -1);
    35    (void) __sync_fetch_and_sub (&si[1], -1);
    36    (void) __sync_fetch_and_sub (&ui[1], -1);
    37    (void) __sync_fetch_and_sub (&sl[1], -1);
    38    (void) __sync_fetch_and_sub (&ul[1], -1);
    39    (void) __sync_fetch_and_sub (&sll[1], -1);
    40    (void) __sync_fetch_and_sub (&ull[1], -1);
    41  
    42    (void) __sync_fetch_and_or (&sc[1], -1);
    43    (void) __sync_fetch_and_or (&uc[1], -1);
    44    (void) __sync_fetch_and_or (&ss[1], -1);
    45    (void) __sync_fetch_and_or (&us[1], -1);
    46    (void) __sync_fetch_and_or (&si[1], -1);
    47    (void) __sync_fetch_and_or (&ui[1], -1);
    48    (void) __sync_fetch_and_or (&sl[1], -1);
    49    (void) __sync_fetch_and_or (&ul[1], -1);
    50    (void) __sync_fetch_and_or (&sll[1], -1);
    51    (void) __sync_fetch_and_or (&ull[1], -1);
    52  
    53    (void) __sync_fetch_and_xor (&sc[1], -1);
    54    (void) __sync_fetch_and_xor (&uc[1], -1);
    55    (void) __sync_fetch_and_xor (&ss[1], -1);
    56    (void) __sync_fetch_and_xor (&us[1], -1);
    57    (void) __sync_fetch_and_xor (&si[1], -1);
    58    (void) __sync_fetch_and_xor (&ui[1], -1);
    59    (void) __sync_fetch_and_xor (&sl[1], -1);
    60    (void) __sync_fetch_and_xor (&ul[1], -1);
    61    (void) __sync_fetch_and_xor (&sll[1], -1);
    62    (void) __sync_fetch_and_xor (&ull[1], -1);
    63  
    64    (void) __sync_fetch_and_and (&sc[1], -1);
    65    (void) __sync_fetch_and_and (&uc[1], -1);
    66    (void) __sync_fetch_and_and (&ss[1], -1);
    67    (void) __sync_fetch_and_and (&us[1], -1);
    68    (void) __sync_fetch_and_and (&si[1], -1);
    69    (void) __sync_fetch_and_and (&ui[1], -1);
    70    (void) __sync_fetch_and_and (&sl[1], -1);
    71    (void) __sync_fetch_and_and (&ul[1], -1);
    72    (void) __sync_fetch_and_and (&sll[1], -1);
    73    (void) __sync_fetch_and_and (&ull[1], -1);
    74  
    75    (void) __sync_fetch_and_nand (&sc[1], -1);
    76    (void) __sync_fetch_and_nand (&uc[1], -1);
    77    (void) __sync_fetch_and_nand (&ss[1], -1);
    78    (void) __sync_fetch_and_nand (&us[1], -1);
    79    (void) __sync_fetch_and_nand (&si[1], -1);
    80    (void) __sync_fetch_and_nand (&ui[1], -1);
    81    (void) __sync_fetch_and_nand (&sl[1], -1);
    82    (void) __sync_fetch_and_nand (&ul[1], -1);
    83    (void) __sync_fetch_and_nand (&sll[1], -1);
    84    (void) __sync_fetch_and_nand (&ull[1], -1);
    85  }
    86  
    87  void test_fetch_and_op (void)
    88  {
    89  signed char sc[2];
    90  unsigned char uc[2];
    91  signed short ss[2];
    92  unsigned short us[2];
    93  signed int si[2];
    94  unsigned int ui[2];
    95  signed long sl[2];
    96  unsigned long ul[2];
    97  signed long long sll[2];
    98  unsigned long long ull[2];
    99    sc[1] = __sync_fetch_and_add (&sc[1], -11);
   100    uc[1] = __sync_fetch_and_add (&uc[1], -11);
   101    ss[1] = __sync_fetch_and_add (&ss[1], -11);
   102    us[1] = __sync_fetch_and_add (&us[1], -11);
   103    si[1] = __sync_fetch_and_add (&si[1], -11);
   104    ui[1] = __sync_fetch_and_add (&ui[1], -11);
   105    sl[1] = __sync_fetch_and_add (&sl[1], -11);
   106    ul[1] = __sync_fetch_and_add (&ul[1], -11);
   107    sll[1] = __sync_fetch_and_add (&sll[1], -11);
   108    ull[1] = __sync_fetch_and_add (&ull[1], -11);
   109  
   110    sc[1] = __sync_fetch_and_sub (&sc[1], -11);
   111    uc[1] = __sync_fetch_and_sub (&uc[1], -11);
   112    ss[1] = __sync_fetch_and_sub (&ss[1], -11);
   113    us[1] = __sync_fetch_and_sub (&us[1], -11);
   114    si[1] = __sync_fetch_and_sub (&si[1], -11);
   115    ui[1] = __sync_fetch_and_sub (&ui[1], -11);
   116    sl[1] = __sync_fetch_and_sub (&sl[1], -11);
   117    ul[1] = __sync_fetch_and_sub (&ul[1], -11);
   118    sll[1] = __sync_fetch_and_sub (&sll[1], -11);
   119    ull[1] = __sync_fetch_and_sub (&ull[1], -11);
   120  
   121    sc[1] = __sync_fetch_and_or (&sc[1], -11);
   122    uc[1] = __sync_fetch_and_or (&uc[1], -11);
   123    ss[1] = __sync_fetch_and_or (&ss[1], -11);
   124    us[1] = __sync_fetch_and_or (&us[1], -11);
   125    si[1] = __sync_fetch_and_or (&si[1], -11);
   126    ui[1] = __sync_fetch_and_or (&ui[1], -11);
   127    sl[1] = __sync_fetch_and_or (&sl[1], -11);
   128    ul[1] = __sync_fetch_and_or (&ul[1], -11);
   129    sll[1] = __sync_fetch_and_or (&sll[1], -11);
   130    ull[1] = __sync_fetch_and_or (&ull[1], -11);
   131  
   132    sc[1] = __sync_fetch_and_xor (&sc[1], -11);
   133    uc[1] = __sync_fetch_and_xor (&uc[1], -11);
   134    ss[1] = __sync_fetch_and_xor (&ss[1], -11);
   135    us[1] = __sync_fetch_and_xor (&us[1], -11);
   136    si[1] = __sync_fetch_and_xor (&si[1], -11);
   137    ui[1] = __sync_fetch_and_xor (&ui[1], -11);
   138    sl[1] = __sync_fetch_and_xor (&sl[1], -11);
   139    ul[1] = __sync_fetch_and_xor (&ul[1], -11);
   140    sll[1] = __sync_fetch_and_xor (&sll[1], -11);
   141    ull[1] = __sync_fetch_and_xor (&ull[1], -11);
   142  
   143    sc[1] = __sync_fetch_and_and (&sc[1], -11);
   144    uc[1] = __sync_fetch_and_and (&uc[1], -11);
   145    ss[1] = __sync_fetch_and_and (&ss[1], -11);
   146    us[1] = __sync_fetch_and_and (&us[1], -11);
   147    si[1] = __sync_fetch_and_and (&si[1], -11);
   148    ui[1] = __sync_fetch_and_and (&ui[1], -11);
   149    sl[1] = __sync_fetch_and_and (&sl[1], -11);
   150    ul[1] = __sync_fetch_and_and (&ul[1], -11);
   151    sll[1] = __sync_fetch_and_and (&sll[1], -11);
   152    ull[1] = __sync_fetch_and_and (&ull[1], -11);
   153  
   154    sc[1] = __sync_fetch_and_nand (&sc[1], -11);
   155    uc[1] = __sync_fetch_and_nand (&uc[1], -11);
   156    ss[1] = __sync_fetch_and_nand (&ss[1], -11);
   157    us[1] = __sync_fetch_and_nand (&us[1], -11);
   158    si[1] = __sync_fetch_and_nand (&si[1], -11);
   159    ui[1] = __sync_fetch_and_nand (&ui[1], -11);
   160    sl[1] = __sync_fetch_and_nand (&sl[1], -11);
   161    ul[1] = __sync_fetch_and_nand (&ul[1], -11);
   162    sll[1] = __sync_fetch_and_nand (&sll[1], -11);
   163    ull[1] = __sync_fetch_and_nand (&ull[1], -11);
   164  }
   165  
   166  void test_lock (void)
   167  {
   168  signed char sc[2];
   169  unsigned char uc[2];
   170  signed short ss[2];
   171  unsigned short us[2];
   172  signed int si[2];
   173  unsigned int ui[2];
   174  signed long sl[2];
   175  unsigned long ul[2];
   176  signed long long sll[2];
   177  unsigned long long ull[2];
   178    sc[1] = __sync_lock_test_and_set (&sc[1], -1);
   179    uc[1] = __sync_lock_test_and_set (&uc[1], -1);
   180    ss[1] = __sync_lock_test_and_set (&ss[1], -1);
   181    us[1] = __sync_lock_test_and_set (&us[1], -1);
   182    si[1] = __sync_lock_test_and_set (&si[1], -1);
   183    ui[1] = __sync_lock_test_and_set (&ui[1], -1);
   184    sl[1] = __sync_lock_test_and_set (&sl[1], -1);
   185    ul[1] = __sync_lock_test_and_set (&ul[1], -1);
   186    sll[1] = __sync_lock_test_and_set (&sll[1], -1);
   187    ull[1] = __sync_lock_test_and_set (&ull[1], -1);
   188  }