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 8void test_op_ignore (void) 9{ 10signed char sc[2]; 11unsigned char uc[2]; 12signed short ss[2]; 13unsigned short us[2]; 14signed int si[2]; 15unsigned int ui[2]; 16signed long sl[2]; 17unsigned long ul[2]; 18signed long long sll[2]; 19unsigned 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 87void test_fetch_and_op (void) 88{ 89signed char sc[2]; 90unsigned char uc[2]; 91signed short ss[2]; 92unsigned short us[2]; 93signed int si[2]; 94unsigned int ui[2]; 95signed long sl[2]; 96unsigned long ul[2]; 97signed long long sll[2]; 98unsigned 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 166void test_lock (void) 167{ 168signed char sc[2]; 169unsigned char uc[2]; 170signed short ss[2]; 171unsigned short us[2]; 172signed int si[2]; 173unsigned int ui[2]; 174signed long sl[2]; 175unsigned long ul[2]; 176signed long long sll[2]; 177unsigned 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} 189