https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91236

--- Comment #7 from Martin Liška <marxin at gcc dot gnu.org> ---
One can see it on x86_64 with the following patch:

diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 9369c36f50e..6192540c219 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -1816,10 +1816,15 @@ vn_walk_cb_data::push_partial_def (const pd_data &pd,
tree vuse,
     {
       pd_data pd = partial_defs.pop ();
       if (TREE_CODE (pd.rhs) == CONSTRUCTOR)
-       /* Empty CONSTRUCTOR.  */
-       memset (buffer + MAX (0, pd.offset),
-               0, MIN ((HOST_WIDE_INT)sizeof (buffer),
-                       pd.size + MIN (0, pd.offset)));
+       {
+         unsigned HOST_WIDE_INT offset = MAX (0, pd.offset);
+         unsigned HOST_WIDE_INT size = MIN ((HOST_WIDE_INT)sizeof (buffer),
+                                            pd.size + MIN (0, pd.offset));
+         gcc_assert (offset + size <= sizeof (buffer));
+
+         /* Empty CONSTRUCTOR.  */
+         memset (buffer + offset, 0, size);
+       }
       else
        {
          unsigned pad = 0;

Reply via email to