cex: avoid uninitialized variables
Akim Demaille <[email protected]>
| Newsgroups | gmane.comp.parsers.bison.patches |
|---|---|
| Message-ID | <[email protected]> |
> Le 13 mai 2020 à 19:58, Akim Demaille <[email protected]> a écrit : > > commit 0d72c68954d5575d2aa6d26b440558b53f901918 > Author: Akim Demaille <[email protected]> > Date: Wed May 13 18:38:09 2020 +0200 > > cex: fixes > > * src/conflicts.c, src/counterexample.c, src/derivation.c: > Do not output diagnostics on stdout, that's the job of stderr, and the > testsuite heavily depend on this. > Do not leave trailing spaces in the output. > * tests/counterexample.at: Use AT_KEYWORDS. > Specify the expected outputs. > * tests/local.mk: Add counterexample.at. I have extracted the following commit from that one, to make it smaller. commit 19e9c1d0a4ab8e3e4abd9a89dd47d4f66a117788 Author: Akim Demaille <[email protected]> Date: Sat May 16 10:46:17 2020 +0200 cex: avoid uninitialized variables * src/conflicts.c (find_state_item_number): New. Use it to avoid uninitialized variables. diff --git a/src/conflicts.c b/src/conflicts.c index 3cf21c47..b6cccd76 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -625,6 +625,15 @@ conflicts_total_count (void) return count_sr_conflicts () + count_rr_conflicts (); } +static state_item_number +find_state_item_number (const rule *r, state_number sn) +{ + for (int i = state_item_map[sn]; i < state_item_map[sn + 1]; ++i) + if (item_number_as_rule_number (*state_items[i].item) == r->number) + return i; + abort (); +} + static void report_state_counterexamples (const state *s) { @@ -633,19 +642,8 @@ report_state_counterexamples (const state *s) for (int i = 0; i < reds->num; ++i) { rule *r1 = reds->rules[i]; - state_item_number c1; - for (int j = state_item_map[sn]; - j < state_item_map[sn + 1]; ++j) - { - if (item_number_as_rule_number (*state_items[j].item) == r1->number) - { - c1 = j; - break; - } - } - - for (int j = state_item_map[sn]; - j < state_item_map[sn + 1]; ++j) + const state_item_number c1 = find_state_item_number (r1, sn); + for (int j = state_item_map[sn]; j < state_item_map[sn + 1]; ++j) { if (SI_DISABLED (j)) continue;