From fd781f88c9e0d9a1c7930526b027020566ee9e19 Mon Sep 17 00:00:00 2001
From: rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 22 May 2001 06:29:39 +0000
Subject: [PATCH]         * emit-rtl.c (init_emit_once): Zero unused memory in
 a         CONST_DOUBLE.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42423 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog  | 5 +++++
 gcc/emit-rtl.c | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b87a8c6e403..20caa7a7724b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index e1e26df10227..7a98f20f46b8 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -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;
-- 
GitLab