Don't miss %merge result type warnings just because the LHS types are

declared after the %merge.
* src/reader.c (get_merge_function): Don't set the merger type yet.
(record_merge_function_type): New function for setting the merger type
and checking for clashes.
(grammar_current_rule_merge_set): Set the location of the %merge for
the current rule.
(packgram): Invoke record_merge_function_type for each rule now that
all symbol type declarations have been parsed.
* src/reader.h (merger_list.type_declaration_location): New member
storing the location of the first %merge from which the type for this
merging function was derived.
* src/symlist.h (symbol_list.merger_declaration_location): New member
storing the location of a rule's %merge, if any.
* tests/glr-regression.at (Missed %merge type warnings when LHS type is
declared later): New test to catch the error fixed by the above patch.
This commit is contained in:
Joel E. Denny
2006-06-26 04:45:24 +00:00
parent ad6b1efa2f
commit 8ee5b53874
5 changed files with 127 additions and 15 deletions

View File

@@ -54,6 +54,7 @@ typedef struct symbol_list
symbol *ruleprec;
int dprec;
int merger;
location merger_declaration_location;
/* The list. */
struct symbol_list *next;