Viewing file: c11-generic-1.c (1.2 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Test C11 _Generic. Valid uses. */ /* { dg-do run } */ /* { dg-options "-std=c11 -pedantic-errors" } */
_Noreturn extern void exit (int); _Noreturn extern void abort (void);
void check (int n) { if (n) abort (); }
int main (void) { int n = 0;
check (_Generic (n++, int: 0)); /* _Generic should not evaluate its argument. */ check (n);
check (_Generic (n, double: n++, default: 0)); check (n);
/* Qualifiers are removed for the purpose of type matching. */ const int cn = 0; check (_Generic (cn, int: 0, default: n++)); check (n); check (_Generic ((const int) n, int: 0, default: n++)); check (n);
/* Arrays decay to pointers. */ int a[1]; const int ca[1]; check (_Generic (a, int *: 0, const int *: n++)); check (n); check (_Generic (ca, const int *: 0, int *: n++)); check (n);
/* Functions decay to pointers. */ extern void f (void); check (_Generic (f, void (*) (void): 0, default: n++)); check (n);
/* _Noreturn is not part of the function type. */ check (_Generic (&abort, void (*) (void): 0, default: n++)); check (n);
/* Integer promotions do not occur. */ short s; check (_Generic (s, short: 0, int: n++)); check (n);
exit (0); }
|