diff --git a/src/reader.c b/src/reader.c index b71dd916..a43c5e41 100644 --- a/src/reader.c +++ b/src/reader.c @@ -122,19 +122,24 @@ record_merge_function_type (int merger, symbol *sym, location declaration_loc) merge_function = merge_function->next) merger_find += 1; aver (merge_function != NULL && merger_find == merger); - if (merge_function->sym && merge_function->sym->content->type_name - && !UNIQSTR_EQ (merge_function->sym->content->type_name, type)) + if (merge_function->sym && merge_function->sym->content->type_name) { - complain (&declaration_loc, complaint, - _("result type clash on merge function %s: " - "<%s> != <%s>"), - quote (merge_function->name), type, - merge_function->sym->content->type_name); - subcomplain (&merge_function->type_declaration_loc, complaint, - _("previous declaration")); + if (!UNIQSTR_EQ (merge_function->sym->content->type_name, type)) + { + complain (&declaration_loc, complaint, + _("result type clash on merge function %s: " + "<%s> != <%s>"), + quote (merge_function->name), type, + merge_function->sym->content->type_name); + subcomplain (&merge_function->type_declaration_loc, complaint, + _("previous declaration")); + } + } + else + { + merge_function->sym = sym; + merge_function->type_declaration_loc = declaration_loc; } - merge_function->sym = sym; - merge_function->type_declaration_loc = declaration_loc; } /*--------------------------------------. diff --git a/tests/glr-regression.at b/tests/glr-regression.at index a6deb9c9..51c6ee5e 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -1682,11 +1682,11 @@ AT_BISON_CHECK([[-o glr-regr18.c -rall -fcaret glr-regr18.y]], 1, [], glr-regr18.y:27.18-24: note: previous declaration 27 | sym1: sym2 %merge { $$ = $][1; } ; | ^~~~~~~ -glr-regr18.y:29.13-19: error: result type clash on merge function 'merge': != +glr-regr18.y:29.13-19: error: result type clash on merge function 'merge': != 29 | sym3: %merge { $$ = 0; } ; | ^~~~~~~ -glr-regr18.y:28.18-24: note: previous declaration - 28 | sym2: sym3 %merge { $$ = $][1; } ; +glr-regr18.y:27.18-24: note: previous declaration + 27 | sym1: sym2 %merge { $$ = $][1; } ; | ^~~~~~~ ]])