summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkim Demaille <akim@lrde.epita.fr>2013-04-22 11:26:28 +0200
committerAkim Demaille <akim@lrde.epita.fr>2013-04-22 11:36:22 +0200
commitd8ce7031024f463a8ba96fc7b2a75facdc52ecb9 (patch)
tree6c78041beadaa96a61cea9b45d36b053dd621145 /src
parent8782fe26cbbbcd4e53354344849ef9f0580caf8a (diff)
downloadbison-d8ce7031024f463a8ba96fc7b2a75facdc52ecb9.tar.gz
diagnostics: use appropriate location for useless precedence/associativity
* src/symtab.c (symbol_precedence_set): Use prec_location, not location (which is the first occurrence of the symbol, possibly just %token). Also, as redefinitions are not allowed, keep the first values, not the subsequent ones. * tests/conflicts.at, tests/existing.at, tests/regression.at: Adjust.
Diffstat (limited to 'src')
-rw-r--r--src/symtab.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/symtab.c b/src/symtab.c
index b132e07b..11a0d756 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -321,12 +321,15 @@ symbol_precedence_set (symbol *sym, int prec, assoc a, location loc)
{
if (a != undef_assoc)
{
- if (sym->prec != 0)
+ if (sym->prec)
symbol_redeclaration (sym, assoc_to_string (a), sym->prec_location,
loc);
- sym->prec = prec;
- sym->assoc = a;
- sym->prec_location = loc;
+ else
+ {
+ sym->prec = prec;
+ sym->assoc = a;
+ sym->prec_location = loc;
+ }
}
/* Only terminals have a precedence. */
@@ -1153,14 +1156,14 @@ print_precedence_warnings (void)
&& !prec_nodes[i]->succ)
{
if (is_assoc_useless (s))
- complain (&s->location, Wprecedence,
+ complain (&s->prec_location, Wprecedence,
_("useless precedence and associativity for %s"), s->tag);
else if (s->assoc == precedence_assoc)
- complain (&s->location, Wprecedence,
+ complain (&s->prec_location, Wprecedence,
_("useless precedence for %s"), s->tag);
}
else if (is_assoc_useless (s))
- complain (&s->location, Wprecedence,
+ complain (&s->prec_location, Wprecedence,
_("useless associativity for %s, use %%precedence"), s->tag);
}
free (used_assoc);