--- gcc/fold-const.c.jj	2011-02-15 15:25:53.000000000 +0100
+++ gcc/fold-const.c	2011-02-26 16:03:22.000000000 +0100
@@ -1163,6 +1163,8 @@ const_binop (enum tree_code code, tree a
       else if (REAL_VALUE_ISNAN (d2))
 	return arg2;
 
+      /* Make sure to clear any padding.  */
+      memset (&value, '\0', sizeof (value));
       inexact = real_arithmetic (&value, code, &d1, &d2);
       real_convert (&result, mode, &value);
 
--- gcc/simplify-rtx.c.jj	2010-12-02 11:51:31.000000000 +0100
+++ gcc/simplify-rtx.c	2011-02-26 16:06:38.000000000 +0100
@@ -3310,6 +3310,8 @@ simplify_const_binary_operation (enum rt
 	    /* Inf * 0 = NaN plus exception.  */
 	    return 0;
 
+	  /* Make sure to clear any padding.  */
+	  memset (&value, '\0', sizeof (value));
 	  inexact = real_arithmetic (&value, rtx_to_tree_code (code),
 				     &f0, &f1);
 	  real_convert (&result, mode, &value);
--- gcc/builtins.c.jj	2011-02-02 16:30:55.000000000 +0100
+++ gcc/builtins.c	2011-02-26 16:02:49.000000000 +0100
@@ -7335,6 +7335,8 @@ fold_builtin_cbrt (location_t loc, tree 
 		  tree tree_root;
 		  REAL_VALUE_TYPE dconstroot;
 
+		  /* Make sure to clear any padding.  */
+		  memset (&dconstroot, '\0', sizeof (dconstroot));
 		  real_arithmetic (&dconstroot, MULT_EXPR,
                                    dconst_third_ptr (), dconst_third_ptr ());
 		  dconstroot = real_value_truncate (TYPE_MODE (type), dconstroot);
@@ -9576,6 +9578,8 @@ fold_builtin_modf (location_t loc, tree 
       case rvc_normal:
 	/* Return (*arg1 = trunc(arg0), arg0-trunc(arg0)).  */
 	real_trunc (&trunc, VOIDmode, value);
+	/* Make sure to clear any padding.  */
+	memset (&frac, '\0', sizeof (frac));
 	real_arithmetic (&frac, MINUS_EXPR, value, &trunc);
 	/* If the original number was negative and already
 	   integral, then the fractional part is -0.0.  */
