PR c++/81917 - ICE with void_t and partial specialization.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / pr79805.C
blob728564ed88374e6364fa8f72e690c82b57b50272
1 // PR middle-end/79805
2 // { dg-do compile }
3 // { dg-options "-O2 -fnon-call-exceptions" }
5 struct A { A (); ~A (); };
7 void bar (void);
9 int
10 f0 (int *d, int f)
12   A z;
13   int e = __atomic_compare_exchange_n (d, &f, 1, 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
14   return e;
17 int
18 f1 (int *a, int bit)
20   A z;
21   unsigned int mask = (1u << bit);
22   return (__sync_fetch_and_or (a, mask) & mask) != 0;
25 int
26 f2 (int *a, int bit)
28   A z;
29   unsigned int mask = (1u << bit);
30   unsigned int t1 = __atomic_fetch_or (a, mask, __ATOMIC_RELAXED);
31   unsigned int t2 = t1 & mask;
32   return t2 != 0;
35 long int
36 f3 (long int *a, int bit)
38   A z;
39   unsigned long int mask = (1ul << bit);
40   return (__atomic_fetch_or (a, mask, __ATOMIC_SEQ_CST) & mask) == 0;
43 int
44 f4 (int *a)
46   A z;
47   unsigned int mask = (1u << 7);
48   return (__sync_fetch_and_or (a, mask) & mask) != 0;
51 int
52 f5 (int *a)
54   A z;
55   unsigned int mask = (1u << 13);
56   return (__atomic_fetch_or (a, mask, __ATOMIC_RELAXED) & mask) != 0;
59 int
60 f6 (int *a)
62   A z;
63   unsigned int mask = (1u << 0);
64   return (__atomic_fetch_or (a, mask, __ATOMIC_SEQ_CST) & mask) != 0;
67 void
68 f7 (int *a, int bit)
70   A z;
71   unsigned int mask = (1u << bit);
72   if ((__sync_fetch_and_xor (a, mask) & mask) != 0)
73     bar ();
76 void
77 f8 (int *a, int bit)
79   A z;
80   unsigned int mask = (1u << bit);
81   if ((__atomic_fetch_xor (a, mask, __ATOMIC_RELAXED) & mask) == 0)
82     bar ();
85 int
86 f9 (int *a, int bit)
88   A z;
89   unsigned int mask = (1u << bit);
90   return (__atomic_fetch_xor (a, mask, __ATOMIC_SEQ_CST) & mask) != 0;
93 int
94 f10 (int *a)
96   A z;
97   unsigned int mask = (1u << 7);
98   return (__sync_fetch_and_xor (a, mask) & mask) != 0;
102 f11 (int *a)
104   A z;
105   unsigned int mask = (1u << 13);
106   return (__atomic_fetch_xor (a, mask, __ATOMIC_RELAXED) & mask) != 0;
110 f12 (int *a)
112   A z;
113   unsigned int mask = (1u << 0);
114   return (__atomic_fetch_xor (a, mask, __ATOMIC_SEQ_CST) & mask) != 0;
118 f13 (int *a, int bit)
120   A z;
121   unsigned int mask = (1u << bit);
122   return (__sync_fetch_and_and (a, ~mask) & mask) != 0;
126 f14 (int *a, int bit)
128   A z;
129   unsigned int mask = (1u << bit);
130   return (__atomic_fetch_and (a, ~mask, __ATOMIC_RELAXED) & mask) != 0;
134 f15 (int *a, int bit)
136   A z;
137   unsigned int mask = (1u << bit);
138   return (__atomic_fetch_and (a, ~mask, __ATOMIC_SEQ_CST) & mask) != 0;
142 f16 (int *a)
144   A z;
145   unsigned int mask = (1u << 7);
146   return (__sync_fetch_and_and (a, ~mask) & mask) != 0;
150 f17 (int *a)
152   A z;
153   unsigned int mask = (1u << 13);
154   return (__atomic_fetch_and (a, ~mask, __ATOMIC_RELAXED) & mask) != 0;
158 f18 (int *a)
160   A z;
161   unsigned int mask = (1u << 0);
162   return (__atomic_fetch_and (a, ~mask, __ATOMIC_SEQ_CST) & mask) != 0;
165 unsigned long int
166 f19 (unsigned long int *a, int bit)
168   A z;
169   unsigned long int mask = (1ul << bit);
170   return (__atomic_xor_fetch (a, mask, __ATOMIC_SEQ_CST) & mask) != 0;
173 unsigned long int
174 f20 (unsigned long int *a)
176   A z;
177   unsigned long int mask = (1ul << 7);
178   return (__atomic_xor_fetch (a, mask, __ATOMIC_SEQ_CST) & mask) == 0;
182 f21 (int *a, int bit)
184   A z;
185   unsigned int mask = (1u << bit);
186   return (__sync_fetch_and_or (a, mask) & mask);
189 unsigned long int
190 f22 (unsigned long int *a)
192   A z;
193   unsigned long int mask = (1ul << 7);
194   return (__atomic_xor_fetch (a, mask, __ATOMIC_SEQ_CST) & mask);
197 unsigned long int
198 f23 (unsigned long int *a)
200   A z;
201   unsigned long int mask = (1ul << 7);
202   return (__atomic_fetch_xor (a, mask, __ATOMIC_SEQ_CST) & mask);
205 unsigned short int
206 f24 (unsigned short int *a)
208   A z;
209   unsigned short int mask = (1u << 7);
210   return (__sync_fetch_and_or (a, mask) & mask) != 0;
213 unsigned short int
214 f25 (unsigned short int *a)
216   A z;
217   unsigned short int mask = (1u << 7);
218   return (__atomic_fetch_or (a, mask, __ATOMIC_SEQ_CST) & mask) != 0;