102 lines · c
1// RUN: %clang_cc1 %s -fsyntax-only -std=c99 -verify2// RUN: %clang_cc1 %s -fsyntax-only -std=c2x -Wc99-compat -verify3// RUN: %clang_cc1 %s -fsyntax-only -std=c11 -Wc99-compat -verify4// RUN: %clang_cc1 %s -fsyntax-only -x c++ -std=c++03 -Wc++11-compat -verify5// RUN: %clang_cc1 %s -fsyntax-only -x c++ -std=c++11 -Wc++98-compat -verify6 7// Identifier characters8extern char a\u01F6; // C11, C++119extern char a\u00AA; // C99, C11, C++1110extern char a\u0384; // C++03, C11, C++1111extern char a\u0E50; // C99, C++03, C11, C++1112extern char a\uFFFF; // none13 14 15 16 17// Identifier initial characters18extern char \u0E50; // C++03, C11, C++1119extern char \u0300; // disallowed in C99/C++0320extern char \u0D61; // C99, C11, C++03, C++1121 22 23 24 25 26 27 28// Disallowed everywhere29#define A \u0000 // expected-error{{control character}}30#define B \u001F // expected-error{{control character}}31#define C \u007F // expected-error{{control character}}32#define D \u009F // expected-error{{control character}}33#define E \uD800 // C++03 allows UCNs representing surrogate characters!34 35 36 37 38 39 40#if __cplusplus41// expected-error@10 {{character <U+0384> not allowed in an identifier}}42// expected-error@12 {{character <U+FFFF> not allowed in an identifier}}43// expected-error@18 {{expected unqualified-id}}44# if __cplusplus >= 201103L45// C++1146// expected-error@19 {{expected unqualified-id}}47// expected-error@33 {{invalid universal character}}48 49# else50// C++0351// expected-error@19 {{expected unqualified-id}}52// expected-warning@33 {{universal character name refers to a surrogate character}}53 54# endif55#else56# if __STDC_VERSION__ >= 202311L57// C2358// expected-warning@8 {{using this character in an identifier is incompatible with C99}}59// expected-error@10 {{character <U+0384> not allowed in an identifier}}60// expected-error@12 {{character <U+FFFF> not allowed in an identifier}}61// expected-error@18 {{expected identifier}}62// expected-error@19 {{expected identifier}}63// expected-error@33 {{invalid universal character}}64# elif __STDC_VERSION__ >= 201112L65// C1166// expected-warning@8 {{using this character in an identifier is incompatible with C99}}67// expected-warning@10 {{using this character in an identifier is incompatible with C99}}68// expected-error@12 {{character <U+FFFF> not allowed in an identifier}}69// expected-warning@18 {{starting an identifier with this character is incompatible with C99}}70// expected-error@19 {{expected identifier}}71// expected-error@33 {{invalid universal character}}72 73# else74// C9975// expected-error@8 {{not allowed in an identifier}}76// expected-error@10 {{not allowed in an identifier}}77// expected-error@12 {{not allowed in an identifier}}78// expected-error@18 {{expected identifier}}79// expected-error@19 {{expected identifier}}80// expected-error@33 {{invalid universal character}}81 82# endif83#endif84 85#define AAA\u0024 // expected-error {{character '$' cannot be specified by a universal character name}} \86 // expected-warning {{whitespace}}87#define AAB\u0040 // expected-error {{character '@' cannot be specified by a universal character name}} \88 // expected-warning {{whitespace}}89#define AAC\u0060 // expected-error {{character '`' cannot be specified by a universal character name}} \90 // expected-warning {{whitespace}}91 92#define ABA \u0024 // expected-error {{character '$' cannot be specified by a universal character name}}93#define ABB \u0040 // expected-error {{character '@' cannot be specified by a universal character name}}94#define ABC \u0060 // expected-error {{character '`' cannot be specified by a universal character name}}95 96int GH62133_a\u0024; // expected-error {{character '$' cannot be specified by a universal character name}} \97 // expected-error {{}}98int GH62133_b\u0040; // expected-error {{character '@' cannot be specified by a universal character name}} \99 // expected-error {{}}100int GH62133_c\u0060; // expected-error {{character '`' cannot be specified by a universal character name}} \101 // expected-error {{}}102