-Wreserved-names, -fpermissive allows local variables named 'nil' to be created even with -funtyped-nil, they supersede the global untyped 'nil'

This commit is contained in:
Wolfgang Bumiller 2012-12-28 18:22:09 +01:00
parent 2e0216b7c6
commit 77d454725a
3 changed files with 10 additions and 0 deletions

1
opts.c
View file

@ -54,6 +54,7 @@ static void opts_setdefault() {
opts_set(opts.warn, WARN_UNREACHABLE_CODE, true); opts_set(opts.warn, WARN_UNREACHABLE_CODE, true);
opts_set(opts.warn, WARN_CPP, true); opts_set(opts.warn, WARN_CPP, true);
opts_set(opts.warn, WARN_UNKNOWN_ATTRIBUTE, true); opts_set(opts.warn, WARN_UNKNOWN_ATTRIBUTE, true);
opts_set(opts.warn, WARN_RESERVED_NAMES, true);
/* flags */ /* flags */
opts_set(opts.flags, ADJUST_VECTOR_FIELDS, true); opts_set(opts.flags, ADJUST_VECTOR_FIELDS, true);
opts_set(opts.flags, FTEPP, false); opts_set(opts.flags, FTEPP, false);

View file

@ -47,6 +47,7 @@
GMQCC_DEFINE_FLAG(BAIL_ON_WERROR) GMQCC_DEFINE_FLAG(BAIL_ON_WERROR)
GMQCC_DEFINE_FLAG(LOOP_LABELS) GMQCC_DEFINE_FLAG(LOOP_LABELS)
GMQCC_DEFINE_FLAG(UNTYPED_NIL) GMQCC_DEFINE_FLAG(UNTYPED_NIL)
GMQCC_DEFINE_FLAG(PERMISSIVE)
#endif #endif
/* warning flags */ /* warning flags */
@ -78,6 +79,7 @@
GMQCC_DEFINE_FLAG(UNREACHABLE_CODE) GMQCC_DEFINE_FLAG(UNREACHABLE_CODE)
GMQCC_DEFINE_FLAG(CPP) GMQCC_DEFINE_FLAG(CPP)
GMQCC_DEFINE_FLAG(UNKNOWN_ATTRIBUTE) GMQCC_DEFINE_FLAG(UNKNOWN_ATTRIBUTE)
GMQCC_DEFINE_FLAG(RESERVED_NAMES)
#endif #endif
#ifdef GMQCC_TYPE_OPTIMIZATIONS #ifdef GMQCC_TYPE_OPTIMIZATIONS

View file

@ -4283,6 +4283,13 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
* Also: if there was a prototype, `var` will be deleted and set to `proto` which * Also: if there was a prototype, `var` will be deleted and set to `proto` which
* is then filled with the previous definition and the parameter-names replaced. * is then filled with the previous definition and the parameter-names replaced.
*/ */
if (!strcmp(var->name, "nil")) {
if (OPTS_FLAG(UNTYPED_NIL)) {
if (!localblock || !OPTS_FLAG(PERMISSIVE))
parseerror(parser, "name `nil` not allowed (try -fpermissive)");
} else
(void)!parsewarning(parser, WARN_RESERVED_NAMES, "variable name `nil` is reserved");
}
if (!localblock) { if (!localblock) {
/* Deal with end_sys_ vars */ /* Deal with end_sys_ vars */
was_end = false; was_end = false;