diff --git a/src/parse-gram.y b/src/parse-gram.y index 52c85c8e..a9f38abf 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -530,7 +530,7 @@ symbol_def: } symbol_class_set ($1, current_class, @1, true); symbol_type_set ($1, current_type, @1); - symbol_make_alias ($1, $2, @$); + symbol_make_alias ($1, $2, @2); } | id INT string_as_id { @@ -545,7 +545,7 @@ symbol_def: symbol_class_set ($1, current_class, @1, true); symbol_type_set ($1, current_type, @1); symbol_user_token_number_set ($1, $2, @2); - symbol_make_alias ($1, $3, @$); + symbol_make_alias ($1, $3, @3); } ; diff --git a/src/symtab.c b/src/symtab.c index a91ac3f8..9a062aaf 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -462,9 +462,7 @@ symbol_class_set (symbol *sym, symbol_class class, location loc, bool declaring) void symbol_user_token_number_set (symbol *sym, int user_token_number, location loc) { - int *user_token_numberp; - - user_token_numberp = &sym->content->user_token_number; + int *user_token_numberp = &sym->content->user_token_number; if (*user_token_numberp != USER_NUMBER_UNDEFINED && *user_token_numberp != user_token_number) complain (&loc, complaint, _("redefining user token number of %s"), diff --git a/tests/input.at b/tests/input.at index 0ada606e..5e3cbe3d 100644 --- a/tests/input.at +++ b/tests/input.at @@ -801,6 +801,63 @@ input.y:7.6-8: warning: unset value: $$ [-Wother] AT_CLEANUP +## ------------------ ## +## Duplicate string. ## +## ------------------ ## + + +AT_SETUP([Duplicate string]) + +AT_BISON_OPTION_PUSHDEFS +AT_DATA([input.y], +[[/* 'Bison -v' used to dump core when two tokens are defined with the same + string, as LE and GE below. */ + +%token NUM +%token LE "<=" +%token GE "<=" + +%% +exp: '(' exp ')' | NUM ; +%% +]]) +AT_BISON_OPTION_POPDEFS + +AT_BISON_CHECK([-v -o input.c input.y], 0, [], +[[input.y:6.11-14: warning: symbol "<=" used more than once as a literal string [-Wother] +]]) + +AT_CLEANUP + + +## ------------------ ## +## Token collisions. ## +## ------------------ ## + +AT_SETUP([Token collisions]) + +AT_DATA([[input.y]], +[[%token FOO 42 "foo" + BAR 42 "foo" +%% +exp: FOO BAR; +]]) + +AT_BISON_CHECK([-fcaret input.y], [1], [], +[[input.y:2.17-21: warning: symbol "foo" used more than once as a literal string [-Wother] + BAR 42 "foo" + ^^^^^ +input.y:2.10-12: error: user token number 42 redeclaration for BAR + BAR 42 "foo" + ^^^ +input.y:1.8-10: previous declaration for FOO + %token FOO 42 "foo" + ^^^ +]]) + +AT_CLEANUP + + ## ---------------------- ## ## Incompatible Aliases. ## ## ---------------------- ## diff --git a/tests/regression.at b/tests/regression.at index d0cb5107..1a7d777c 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -188,35 +188,6 @@ AT_CHECK([grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore]) AT_CLEANUP -## ------------------ ## -## Duplicate string. ## -## ------------------ ## - - -AT_SETUP([Duplicate string]) - -AT_BISON_OPTION_PUSHDEFS -AT_DATA([input.y], -[[/* 'Bison -v' used to dump core when two tokens are defined with the same - string, as LE and GE below. */ - -%token NUM -%token LE "<=" -%token GE "<=" - -%% -exp: '(' exp ')' | NUM ; -%% -]]) -AT_BISON_OPTION_POPDEFS - -AT_BISON_CHECK([-v -o input.c input.y], 0, [], -[[input.y:6.8-14: warning: symbol "<=" used more than once as a literal string [-Wother] -]]) - -AT_CLEANUP - - ## ------------------- ## ## Rule Line Numbers. ## ## ------------------- ## @@ -477,15 +448,15 @@ AT_BISON_OPTION_POPDEFS # the user specification is eliminated. AT_BISON_CHECK([-o input.c input.y], [[0]], [[]], [[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother] -input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] +input.y:22.16-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] ]]) AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]], [[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother] %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" ^^^^^^^ -input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] +input.y:22.16-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ]]) AT_COMPILE([input])