2020-12-09 16:26:27 +08:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-identifier -Wno-visibility %s
|
|
|
|
|
|
|
|
#define __oof foo__ // expected-warning {{macro name is a reserved identifier}}
|
|
|
|
|
|
|
|
int foo__bar() { return 0; } // no-warning
|
|
|
|
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 _foo() { return 0; } // expected-warning {{identifier '_foo' is reserved because it starts with '_' at global scope}}
|
|
|
|
|
|
|
|
// This one is explicitly skipped by -Wreserved-identifier
|
|
|
|
void *_; // no-warning
|
|
|
|
|
|
|
|
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
|
|
|
|
goto __reserved; // expected-warning {{identifier '__reserved' is reserved because it starts with '__'}}
|
|
|
|
__reserved: // expected-warning {{identifier '__reserved' is reserved because it starts with '__'}}
|
|
|
|
;
|
2021-10-07 05:11:32 +08:00
|
|
|
goto _not_reserved;
|
|
|
|
_not_reserved: ;
|
2020-12-09 16:26:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void foot(unsigned int _not_reserved) {} // no-warning
|
|
|
|
|
|
|
|
enum __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 // expected-warning {{identifier '_other' is reserved because it starts with '_' at global scope}}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct __babar { // expected-warning {{identifier '__babar' is reserved because it starts with '__'}}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _Zebulon; // expected-warning {{identifier '_Zebulon' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
struct _Zebulon2 { // expected-warning {{identifier '_Zebulon2' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
} * p;
|
|
|
|
struct _Zebulon3 *pp; // expected-warning {{identifier '_Zebulon3' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int _Field; // expected-warning {{identifier '_Field' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
int _field; // no-warning
|
|
|
|
} _Typedef; // expected-warning {{identifier '_Typedef' is reserved because it starts with '_' followed by a capital letter}}
|
|
|
|
|
|
|
|
int foobar() {
|
|
|
|
return foo__bar(); // no-warning
|
|
|
|
}
|
|
|
|
|
|
|
|
struct _reserved { // expected-warning {{identifier '_reserved' is reserved because it starts with '_' at global scope}}
|
|
|
|
int a;
|
|
|
|
} cunf(void) {
|
|
|
|
return (struct _reserved){1};
|
|
|
|
}
|
|
|
|
|
|
|
|
// FIXME: According to clang declaration context layering, _preserved belongs to
|
|
|
|
// the translation unit, so we emit a warning. It's unclear that's what the
|
|
|
|
// standard mandate, but it's such a corner case we can live with it.
|
|
|
|
void func(struct _preserved { int a; } r) {} // expected-warning {{identifier '_preserved' is reserved because it starts with '_' at global scope}}
|
|
|
|
|
|
|
|
extern char *_strdup(const char *); // expected-warning {{identifier '_strdup' is reserved because it starts with '_' at global scope}}
|
|
|
|
|
|
|
|
// Don't warn on redecleration
|
|
|
|
extern char *_strdup(const char *); // no-warning
|
|
|
|
|
|
|
|
void ok() {
|
|
|
|
void _ko(); // expected-warning {{identifier '_ko' is reserved because it starts with '_' at global scope}}
|
|
|
|
extern int _ko_again; // expected-warning {{identifier '_ko_again' is reserved because it starts with '_' at global scope}}
|
|
|
|
}
|