aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-05-21 23:29:39 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-05-21 23:29:39 -0700
commitd425c5b05f7fad4e7150e89246eea6c05e2264bd (patch)
tree81d71cce4f71afa12ff4340d5a95d0f9fd354e0d
parent9ea659ac82ee639346acbf3c6ba2dff18d63c514 (diff)
downloadgcc-d425c5b05f7fad4e7150e89246eea6c05e2264bd.zip
gcc-d425c5b05f7fad4e7150e89246eea6c05e2264bd.tar.gz
gcc-d425c5b05f7fad4e7150e89246eea6c05e2264bd.tar.bz2
emit-rtl.c (init_emit_once): Zero unused memory in a CONST_DOUBLE.
* emit-rtl.c (init_emit_once): Zero unused memory in a CONST_DOUBLE. From-SVN: r42423
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/emit-rtl.c9
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b87a8c..20caa7a 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 e1e26df..7a98f20 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;