]> git.saurik.com Git - bison.git/commitdiff
In warnings, say "previous declaration" rather than "first
authorJoel E. Denny <jdenny@ces.clemson.edu>
Fri, 7 Jul 2006 21:25:03 +0000 (21:25 +0000)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Fri, 7 Jul 2006 21:25:03 +0000 (21:25 +0000)
declaration".
* src/symtab.c (redeclaration): Do that here.
* src/reader.c (record_merge_function_type): In the case of a result
type clash, report the previous declaration rather than the very first
one in the grammar file.
* tests/glr-regression.at (Missed %merge type warnings when LHS type is
declared later): Add a third declaration to check this behavior.
* tests/input.at (Incompatible Aliases): Update output.

ChangeLog
src/reader.c
src/symtab.c
tests/glr-regression.at
tests/input.at

index 614a3982221fc562eae4e0c1b7b55f651db48239..831687b67030dd21126d440fe244189fa724fbfe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-07-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       In warnings, say "previous declaration" rather than "first
+       declaration".
+       * src/symtab.c (redeclaration): Do that here.
+       * src/reader.c (record_merge_function_type): In the case of a result
+       type clash, report the previous declaration rather than the very first
+       one in the grammar file.
+       * tests/glr-regression.at (Missed %merge type warnings when LHS type is
+       declared later): Add a third declaration to check this behavior.
+       * tests/input.at (Incompatible Aliases): Update output.
+
 2006-06-27  Akim Demaille  <akim@epita.fr>
 
        * doc/Doxyfile.in: New.
 2006-06-27  Akim Demaille  <akim@epita.fr>
 
        * doc/Doxyfile.in: New.
index 31bd536dad16fc8f7b68a6dba5d99b96f9f01b0a..e58b03279ec5a36110e6bc7e4eac5120d10fcd48 100644 (file)
@@ -146,19 +146,16 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc)
        merge_function = merge_function->next)
     merger_find += 1;
   assert (merge_function != NULL && merger_find == merger);
        merge_function = merge_function->next)
     merger_find += 1;
   assert (merge_function != NULL && merger_find == merger);
-  if (merge_function->type == NULL)
-    {
-      merge_function->type = uniqstr_new (type);
-      merge_function->type_declaration_location = declaration_loc;
-    }
-  else if (!UNIQSTR_EQ (merge_function->type, type))
+  if (merge_function->type != NULL && !UNIQSTR_EQ (merge_function->type, type))
     {
       warn_at (declaration_loc,
               _("result type clash on merge function `%s': <%s> != <%s>"),
               merge_function->name, type, merge_function->type);
       warn_at (merge_function->type_declaration_location,
     {
       warn_at (declaration_loc,
               _("result type clash on merge function `%s': <%s> != <%s>"),
               merge_function->name, type, merge_function->type);
       warn_at (merge_function->type_declaration_location,
-              _("first declaration"));
+              _("previous declaration"));
     }
     }
+  merge_function->type = uniqstr_new (type);
+  merge_function->type_declaration_location = declaration_loc;
 }
 
 /*--------------------------------------.
 }
 
 /*--------------------------------------.
index ae0993ee7dce3553e8dc2709d90ff1657fb11a74..b71a3fbad01f961948fe028bd1970117eb33b932 100644 (file)
@@ -108,7 +108,7 @@ static void
 redeclaration (symbol* s, const char *what, location first, location second)
 {
   complain_at (second, _("%s redeclaration for %s"), what, s->tag);
 redeclaration (symbol* s, const char *what, location first, location second)
 {
   complain_at (second, _("%s redeclaration for %s"), what, s->tag);
-  complain_at (first, _("first declaration"));
+  complain_at (first, _("previous declaration"));
 }
 
 
 }
 
 
index b4f650046100ad34cacc01b94749ed76fcdb4808..23fda14adecd1c6539748313a589ea688e9a2586 100644 (file)
@@ -1679,15 +1679,18 @@ AT_DATA_GRAMMAR([glr-regr18.y],
 %union {
   int type1;
   int type2;
 %union {
   int type1;
   int type2;
+  int type3;
 }
 
 %%
 
 sym1: sym2 %merge<merge> { $$ = $1; } ;
 }
 
 %%
 
 sym1: sym2 %merge<merge> { $$ = $1; } ;
-sym2: %merge<merge> { $$ = 0; } ;
+sym2: sym3 %merge<merge> { $$ = $1; } ;
+sym3: %merge<merge> { $$ = 0; } ;
 
 %type <type1> sym1;
 %type <type2> sym2;
 
 %type <type1> sym1;
 %type <type2> sym2;
+%type <type3> sym3;
 
 %%
 
 
 %%
 
@@ -1711,8 +1714,10 @@ main (void)
 ]])
 
 AT_CHECK([[bison -o glr-regr18.c glr-regr18.y]], 0, [],
 ]])
 
 AT_CHECK([[bison -o glr-regr18.c glr-regr18.y]], 0, [],
-[glr-regr18.y:26.13-19: warning: result type clash on merge function `merge': <type2> != <type1>
-glr-regr18.y:25.18-24: warning: first declaration
+[glr-regr18.y:27.18-24: warning: result type clash on merge function `merge': <type2> != <type1>
+glr-regr18.y:26.18-24: warning: previous declaration
+glr-regr18.y:28.13-19: warning: result type clash on merge function `merge': <type3> != <type2>
+glr-regr18.y:27.18-24: warning: previous declaration
 ])
 
 AT_CLEANUP
 ])
 
 AT_CLEANUP
index abbf1f380d472982ea172a8d5c691b9e911e320f..fb571ab64c9752cfb527a551b0ce9acacd203c7f 100644 (file)
@@ -193,13 +193,13 @@ exp: foo;
 
 AT_CHECK([bison input.y], [1], [],
 [[input.y:8.7-11: %type redeclaration for foo
 
 AT_CHECK([bison input.y], [1], [],
 [[input.y:8.7-11: %type redeclaration for foo
-input.y:3.7-11: first declaration
+input.y:3.7-11: previous declaration
 input.y:10.13-17: %destructor redeclaration for foo
 input.y:10.13-17: %destructor redeclaration for foo
-input.y:5.13-17: first declaration
+input.y:5.13-17: previous declaration
 input.y:9.10-14: %printer redeclaration for foo
 input.y:9.10-14: %printer redeclaration for foo
-input.y:4.10-14: first declaration
+input.y:4.10-14: previous declaration
 input.y:11.1-5: %left redeclaration for foo
 input.y:11.1-5: %left redeclaration for foo
-input.y:6.1-5: first declaration
+input.y:6.1-5: previous declaration
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP