* src/conflicts.c (conflicts_print): Don't complain at all when

there are no reduce/reduce conflicts, and as many shift/reduce
conflicts as expected.
* tests/regression.at (%expect right): Adjust.
This commit is contained in:
Akim Demaille
2001-11-26 09:32:32 +00:00
parent b83f0407c6
commit a034c8b849
3 changed files with 37 additions and 24 deletions

View File

@@ -1,3 +1,10 @@
2001-11-26 Akim Demaille <akim@epita.fr>
* src/conflicts.c (conflicts_print): Don't complain at all when
there are no reduce/reduce conflicts, and as many shift/reduce
conflicts as expected.
* tests/regression.at (%expect right): Adjust.
2001-11-25 Marc Autret <autret_m@epita.fr>
* doc/bison.texinfo (Mystery Conflicts): Hint '-v' use.

View File

@@ -439,6 +439,11 @@ conflicts_print (void)
{
int i;
/* Is the number of SR conflicts OK? Either EXPECTED_CONFLICTS is
not set, and then we want 0 SR, or else it is specified, in which
case we want equality. */
int src_ok = 0;
int src_total = 0;
int rrc_total = 0;
@@ -450,31 +455,34 @@ conflicts_print (void)
rrc_total += count_rr_conflicts (i);
}
src_ok = src_total == (expected_conflicts == -1 ? 0 : expected_conflicts);
/* If there are no RR conflicts, and as many SR conflicts as
expected, then there is nothing to report. */
if (!rrc_total && src_ok)
return;
/* Report the total number of conflicts on STDERR. */
if (src_total || rrc_total)
if (yacc_flag)
{
if (yacc_flag)
{
/* If invoked with `--yacc', use the output format specified by
POSIX. */
fprintf (stderr, _("conflicts: "));
if (src_total > 0)
fprintf (stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, ",");
if (rrc_total > 0)
fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
putc ('\n', stderr);
}
else
{
fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr);
}
/* If invoked with `--yacc', use the output format specified by
POSIX. */
fprintf (stderr, _("conflicts: "));
if (src_total > 0)
fprintf (stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, ",");
if (rrc_total > 0)
fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
putc ('\n', stderr);
}
else
{
fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr);
}
if (expected_conflicts != -1
&& src_total != expected_conflicts)
if (expected_conflicts != -1 && !src_ok)
{
complain_message_count++;
fprintf (stderr, ngettext ("expected %d shift/reduce conflict\n",

View File

@@ -275,9 +275,7 @@ AT_DATA([input.y],
exp: exp OP exp | NUM;
]])
AT_CHECK([bison input.y -o input.c], 0, [],
[input.y contains 1 shift/reduce conflict.
])
AT_CHECK([bison input.y -o input.c], 0)
AT_CLEANUP