diff --git a/src/symtab.c b/src/symtab.c index 14c672b6..dd2a3d53 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -309,9 +309,12 @@ complain_class_redeclared (symbol *sym, symbol_class class, location second) class == token_sym ? _("symbol %s redeclared as a token") : _("symbol %s redeclared as a nonterminal"), sym->tag); - i += SUB_INDENT; - complain_indent (&sym->location, complaint, &i, - _("previous definition")); + if (!location_empty (sym->location)) + { + i += SUB_INDENT; + complain_indent (&sym->location, complaint, &i, + _("previous definition")); + } } diff --git a/tests/input.at b/tests/input.at index 312aa5a9..70c0cecc 100644 --- a/tests/input.at +++ b/tests/input.at @@ -625,6 +625,7 @@ AT_DATA([[input.y]], [[%token FOO %nterm FOO BAR %token BAR +%nterm error // The token error cannot be redefined as an nterm. %% FOO: BAR BAR: @@ -643,7 +644,10 @@ input.y:3.8-10: error: symbol BAR redeclared as a token input.y:2.12-14: previous definition %nterm FOO BAR ^~~ -input.y:5.1-3: error: rule given for FOO, which is a token +input.y:4.8-12: error: symbol error redeclared as a nonterminal + %nterm error // The token error cannot be redefined as an nterm. + ^~~~~ +input.y:6.1-3: error: rule given for FOO, which is a token FOO: BAR ^~~ ]])