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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.