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

@@ -33,6 +33,7 @@ typedef struct merger_list
struct merger_list* next;
uniqstr name;
uniqstr type;
location type_declaration_location;
} merger_list;
/* From the parser. */