/* PR c++/71675 - __atomic_compare_exchange_n returns wrong type for typed enum */ /* { dg-do compile } */ /* { dg-options "-std=c11" } */ #define Test(T) \ do { \ static T x; \ int r [_Generic (__atomic_compare_exchange_n (&x, &x, x, 0, 0, 0), \ _Bool: 1, default: -1)]; \ (void)&r; \ } while (0) void f (void) { /* __atomic_compare_exchange_n would fail to return _Bool when its arguments were one of the three character types. */ Test (char); Test (signed char); Test (unsigned char); Test (int); Test (unsigned int); Test (long); Test (unsigned long); Test (long long); Test (unsigned long long); typedef enum E { e } E; Test (E); }