With LTO, initialize_integral_ops, initialize_integral_ops and 
initialize_float_ops
are all inlined into the constructor of range_op_table, so you get an 
uninitialized
warning about m_range_tree not being initialized due to it having a clobber at 
the
begining of the constructor. This adds a value initialization for m_range_tree 
to have
it initialized inside the constructor. This has a small startup cost since we 
are zeroing
the whole array a second time though since we setting it later on to be, the 
cost of pulling
it into the cache is going to be small.

Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

        * range-op.h (class range_op_table): Value initialize m_range_tree.

Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
---
 gcc/range-op.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gcc/range-op.h b/gcc/range-op.h
index f7ecc660fb9..265d3c21691 100644
--- a/gcc/range-op.h
+++ b/gcc/range-op.h
@@ -404,7 +404,12 @@ private:
       gcc_checking_assert (m_range_tree[code] == NULL);
       m_range_tree[code] = &op;
     }
-  range_operator *m_range_tree[RANGE_OP_TABLE_SIZE];
+
+  /* m_range_tree needs to be value initialized instead
+     of default initialized; otherwise it could be considered
+     as unitialized even though it is zero initialized due to
+     being a static variable, there is a clobber in the ctor. */
+  range_operator *m_range_tree[RANGE_OP_TABLE_SIZE]{};
   void initialize_integral_ops ();
   void initialize_pointer_ops ();
   void initialize_float_ops ();
-- 
2.43.0

Reply via email to