emit-rtl.c (init_emit_once): Zero unused memory in a CONST_DOUBLE.
authorRichard Henderson <rth@redhat.com>
Tue, 22 May 2001 06:29:39 +0000 (23:29 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 22 May 2001 06:29:39 +0000 (23:29 -0700)
        * emit-rtl.c (init_emit_once): Zero unused memory in a
        CONST_DOUBLE.

From-SVN: r42423

gcc/ChangeLog
gcc/emit-rtl.c

index 4b87a8c..20caa7a 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-21  Richard Henderson  <rth@redhat.com>
+
+       * emit-rtl.c (init_emit_once): Zero unused memory in a
+       CONST_DOUBLE.
+
 2001-05-21  Mark Mitchell  <mark@codesourcery.com>
 
        * tree.h (type_num_arguments): Declare it.
index e1e26df..7a98f20 100644 (file)
@@ -4336,9 +4336,16 @@ init_emit_once (line_numbers)
          rtx tem = rtx_alloc (CONST_DOUBLE);
          union real_extract u;
 
-         memset ((char *) &u, 0, sizeof u);  /* Zero any holes in a structure.  */
+         /* Zero any holes in a structure.  */
+         memset ((char *) &u, 0, sizeof u);
          u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2;
 
+         /* Avoid trailing garbage in the rtx.  */
+         if (sizeof (u) < sizeof (HOST_WIDE_INT))
+           CONST_DOUBLE_LOW (tem) = 0;
+         if (sizeof (u) < 2 * sizeof (HOST_WIDE_INT))
+           CONST_DOUBLE_HIGH (tem) = 0;
+
          memcpy (&CONST_DOUBLE_LOW (tem), &u, sizeof u);
          CONST_DOUBLE_MEM (tem) = cc0_rtx;
          CONST_DOUBLE_CHAIN (tem) = NULL_RTX;