From a034c8b84911a09b68d92ebbe9a90e08f21aef23 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 26 Nov 2001 09:32:32 +0000 Subject: [PATCH] * 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. --- ChangeLog | 7 +++++++ src/conflicts.c | 50 ++++++++++++++++++++++++++------------------- tests/regression.at | 4 +--- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 49b0f394..f425d982 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-11-26 Akim Demaille + + * 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 * doc/bison.texinfo (Mystery Conflicts): Hint '-v' use. diff --git a/src/conflicts.c b/src/conflicts.c index 6e267104..b6bacb94 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -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", diff --git a/tests/regression.at b/tests/regression.at index 2de592b2..a18bfc45 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -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 -- 2.45.2