// RUN: %clang_cc1 -fsyntax-only -std=c++20 -verify -Wreserved-identifier %s int foo__bar() { return 0; } // expected-warning {{identifier 'foo__bar' is reserved because it contains '__'}} static int _bar() { return 0; } // expected-warning {{identifier '_bar' is reserved because it starts with '_' at global scope}} static int _Bar() { return 0; } // expected-warning {{identifier '_Bar' is reserved because it starts with '_' followed by a capital letter}} int _barbouille() { return 0; } // expected-warning {{identifier '_barbouille' is reserved because it starts with '_' at global scope}} void foo(unsigned int _Reserved) { // expected-warning {{identifier '_Reserved' is reserved because it starts with '_' followed by a capital letter}} unsigned int __1 = // expected-warning {{identifier '__1' is reserved because it starts with '__'}} _Reserved; // no-warning } // This one is explicitly skipped by -Wreserved-identifier void *_; // no-warning template constexpr bool __toucan = true; // expected-warning {{identifier '__toucan' is reserved because it starts with '__'}} template concept _Barbotine = __toucan; // expected-warning {{identifier '_Barbotine' is reserved because it starts with '_' followed by a capital letter}} template // expected-warning {{'__' is reserved because it starts with '__'}} struct BarbeNoire {}; template // no-warning struct BarbeJaune {}; template // expected-warning {{'__' is reserved because it starts with '__'}} void BarbeRousse() {} namespace _Barbidur { // expected-warning {{identifier '_Barbidur' is reserved because it starts with '_' followed by a capital letter}} struct __barbidou {}; // expected-warning {{identifier '__barbidou' is reserved because it starts with '__'}} struct _barbidou {}; // no-warning int __barbouille; // expected-warning {{identifier '__barbouille' is reserved because it starts with '__'}} int _barbouille; // no-warning int __babar() { return 0; } // expected-warning {{identifier '__babar' is reserved because it starts with '__'}} int _babar() { return 0; } // no-warning } // namespace _Barbidur class __barbapapa { // expected-warning {{identifier '__barbapapa' is reserved because it starts with '__'}} void _barbabelle() {} // no-warning int _Barbalala; // expected-warning {{identifier '_Barbalala' is reserved because it starts with '_' followed by a capital letter}} }; enum class __menu { // expected-warning {{identifier '__menu' is reserved because it starts with '__'}} __some, // expected-warning {{identifier '__some' is reserved because it starts with '__'}} _Other, // expected-warning {{identifier '_Other' is reserved because it starts with '_' followed by a capital letter}} _other // no-warning }; enum _Menu { // expected-warning {{identifier '_Menu' is reserved because it starts with '_' followed by a capital letter}} _OtheR_, // expected-warning {{identifier '_OtheR_' is reserved because it starts with '_' followed by a capital letter}} _other_ // expected-warning {{identifier '_other_' is reserved because it starts with '_' at global scope}} }; enum { __some, // expected-warning {{identifier '__some' is reserved because it starts with '__'}} _Other, // expected-warning {{identifier '_Other' is reserved because it starts with '_' followed by a capital letter}} _other // expected-warning {{identifier '_other' is reserved because it starts with '_' at global scope}} }; static union { int _barbeFleurie; // no-warning }; using _Barbamama = __barbapapa; // expected-warning {{identifier '_Barbamama' is reserved because it starts with '_' followed by a capital letter}} int foobar() { return foo__bar(); // no-warning } namespace { int _barbatruc; // no-warning } long double operator"" _BarbeBleue(long double) // expected-warning {{identifier '_BarbeBleue' is reserved because it starts with '_' followed by a capital letter}} { return 0.; } long double operator""_SacreBleu(long double) // no-warning { return 0.; } long double sacrebleu = operator"" _SacreBleu(1.2); // expected-warning {{identifier '_SacreBleu' is reserved because it starts with '_' followed by a capital letter}} long double sangbleu = operator""_SacreBleu(1.2); // no-warning void operator"" _lowercase(unsigned long long); // no-warning void operator""_lowercase(unsigned long long); // no-warning struct _BarbeRouge { // expected-warning {{identifier '_BarbeRouge' is reserved because it starts with '_' followed by a capital letter}} } p; struct _BarbeNoire { // expected-warning {{identifier '_BarbeNoire' is reserved because it starts with '_' followed by a capital letter}} } * q; struct Any { friend void _barbegrise(); // expected-warning {{identifier '_barbegrise' is reserved because it starts with '_' at global scope}} }; #define _not_reserved #define _Reserved // expected-warning {{macro name is a reserved identifier}} #undef _not_reserved #undef _Reserved // expected-warning {{macro name is a reserved identifier}} namespace N { int _namespace_a; extern "C" int _namespace_b; // expected-warning {{identifier '_namespace_b' is reserved because it starts with '_' and has C language linkage}} void _namespace_c(); extern "C" void _namespace_d(); // expected-warning {{identifier '_namespace_d' is reserved because it starts with '_' and has C language linkage}} }