141df74456
declaration. Names starting with an underscore are reserved at the global scope, so cannot be used as the name of an extern "C" symbol in any scope because such usages conflict with a name at global scope.
115 lines
5.4 KiB
C++
115 lines
5.4 KiB
C++
// 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 <class T> constexpr bool __toucan = true; // expected-warning {{identifier '__toucan' is reserved because it starts with '__'}}
|
|
|
|
template <class T>
|
|
concept _Barbotine = __toucan<T>; // expected-warning {{identifier '_Barbotine' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
template <class __> // expected-warning {{'__' is reserved because it starts with '__'}}
|
|
struct BarbeNoire {};
|
|
|
|
template <class _not_reserved> // no-warning
|
|
struct BarbeJaune {};
|
|
|
|
template <class __> // 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}}
|
|
}
|