A recent enhancement to the uninitialized access coverage to include
dynamically allocated objects, including alloca and VLAs, triggers
an expected instance of -Wmaybe-uninitialized on powerpc64-linux
in reload_cse_simplify_operands where an element of an XALLOCAVEC-
allocated array is read before it's provably assigned to.  With
-Werror this causes the bootstrap there to fail.

The attached patch avoids the warning by clearing the element first.

Although not necessary to avoid the warning, the patch also adds
an assert to verify that the array isn't accessed outside its bounds.
recog.c sets which_alternative to -1 in a couple of places and
a number of tests for it being equal to it so I added the assert
"just to be sure."

Tested on x86_64-linux (the warning was also confirmed gone on
powerpc64 by the reporter).

Martin
PR bootstrap/95555 - powepc64 bootstrap failure due to -Wmaybe-uninitialized in reload_cse_simplify_operands

gcc/ChangeLog:

	* postreload.c (reload_cse_simplify_operands): Clear first array element
	before using it.  Assert a precondition.

diff --git a/gcc/postreload.c b/gcc/postreload.c
index f6258285022..c9e637500f1 100644
--- a/gcc/postreload.c
+++ b/gcc/postreload.c
@@ -592,6 +592,13 @@ reload_cse_simplify_operands (rtx_insn *insn, rtx testreg)
 	}
     }
 
+  /* The loop below sets alternative_order[0] but -Wmaybe-uninitialized
+     can't know that.  Clear it here to avoid the warning.  */
+  alternative_order[0] = 0;
+  gcc_assert (!recog_data.n_alternatives
+	      || (which_alternative >= 0
+		  && which_alternative < recog_data.n_alternatives));
+
   /* Record all alternatives which are better or equal to the currently
      matching one in the alternative_order array.  */
   for (i = j = 0; i < recog_data.n_alternatives; i++)

Reply via email to