diff options
Diffstat (limited to 'clang/test/C/C2y/n3457.c')
| -rw-r--r-- | clang/test/C/C2y/n3457.c | 38 | 
1 files changed, 38 insertions, 0 deletions
diff --git a/clang/test/C/C2y/n3457.c b/clang/test/C/C2y/n3457.c new file mode 100644 index 0000000..d71a3f3 --- /dev/null +++ b/clang/test/C/C2y/n3457.c @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -verify=ext -std=c23 -pedantic %s +// RUN: %clang_cc1 -verify=ext -pedantic -x c++ %s +// RUN: %clang_cc1 -verify=pre -std=c2y -pedantic -Wpre-c2y-compat %s + +/* WG14 N3457: Clang 22 + * The __COUNTER__ predefined macro + * + * This predefined macro was supported as an extension in earlier versions of + * Clang, but the required diagnostics for the limits were not added until 22. + */ + +// Ensure that __COUNTER__ starts from 0. +static_assert(__COUNTER__ == 0); /* ext-warning {{'__COUNTER__' is a C2y extension}} +                                    pre-warning {{'__COUNTER__' is incompatible with standards before C2y}} +                                  */ + +// Ensure that the produced value can be used with token concatenation. +#define CAT_IMPL(a, b) a ## b +#define CAT(a, b) CAT_IMPL(a, b) +#define NAME_WITH_COUNTER(a) CAT(a, __COUNTER__) +void test() { +  // Because this is the 2nd expansion, this defines test1. +  int NAME_WITH_COUNTER(test); /* ext-warning {{'__COUNTER__' is a C2y extension}} +                                  pre-warning {{'__COUNTER__' is incompatible with standards before C2y}} +                                */ +  int other_test = test1;      // Ok +} + +// Ensure that __COUNTER__ increments each time you mention it. +static_assert(__COUNTER__ == 2); /* ext-warning {{'__COUNTER__' is a C2y extension}} +                                    pre-warning {{'__COUNTER__' is incompatible with standards before C2y}} +                                 */ +static_assert(__COUNTER__ == 3); /* ext-warning {{'__COUNTER__' is a C2y extension}} +                                    pre-warning {{'__COUNTER__' is incompatible with standards before C2y}} +                                 */ +static_assert(__COUNTER__ == 4); /* ext-warning {{'__COUNTER__' is a C2y extension}} +                                    pre-warning {{'__COUNTER__' is incompatible with standards before C2y}} +                                 */  | 
