1 /* Test we're able use __atomic_fetch_* where possible and verify 2 we generate correct code. */ 3 /* { dg-do run } */ 4 /* { dg-options "-std=c11 -pedantic-errors -fdump-tree-original" } */ 5 6 #include <stdatomic.h> 7 #include <limits.h> 8 9 extern void abort (void); 10 11 #define TEST_TYPE(TYPE, MAX) \ 12 do \ 13 { \ 14 struct S { char a[(MAX) + 1]; }; \ 15 TYPE t = 1; \ 16 struct S a[2][2]; \ 17 struct S (*_Atomic p)[2] = &a[0]; \ 18 p += t; \ 19 if (p != &a[1]) \ 20 abort (); \ 21 p -= t; \ 22 if (p != &a[0]) \ 23 abort (); \ 24 } \ 25 while (0) 26 27 int main(void)28main (void) 29 { 30 TEST_TYPE (signed char, UCHAR_MAX); 31 TEST_TYPE (signed short, USHRT_MAX); 32 } 33 34 /* { dg-final { scan-tree-dump-not "__atomic_compare_exchange" "original" } } */ 35