Commit f6b439c9 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/47903 (var-tracking.c: valgrind error)

	PR middle-end/47903
	* real.c (real_arithmetic) <case PLUS_EXPR, MINUS_EXPR,
	MULT_EXPR, RDIV_EXPR>: Clear padding bits in *r first if
	r isn't op0 nor op1.

From-SVN: r170547
parent 1d944f61
2011-02-27 Jakub Jelinek <jakub@redhat.com>
PR middle-end/47903
* real.c (real_arithmetic) <case PLUS_EXPR, MINUS_EXPR,
MULT_EXPR, RDIV_EXPR>: Clear padding bits in *r first if
r isn't op0 nor op1.
2011-02-23 Georg-Johann Lay <avr@gjlay.de>
* config/avr/avr.md: Remove magic comment for emacs.
......
/* real.c - software floating point emulation.
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002,
2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Stephen L. Moshier (moshier@world.std.com).
Re-written by Richard Henderson <rth@redhat.com>
......@@ -1009,15 +1010,25 @@ real_arithmetic (REAL_VALUE_TYPE *r, int icode, const REAL_VALUE_TYPE *op0,
switch (code)
{
case PLUS_EXPR:
/* Clear any padding areas in *r if it isn't equal to one of the
operands so that we can later do bitwise comparisons later on. */
if (r != op0 && r != op1)
memset (r, '\0', sizeof (*r));
return do_add (r, op0, op1, 0);
case MINUS_EXPR:
if (r != op0 && r != op1)
memset (r, '\0', sizeof (*r));
return do_add (r, op0, op1, 1);
case MULT_EXPR:
if (r != op0 && r != op1)
memset (r, '\0', sizeof (*r));
return do_multiply (r, op0, op1);
case RDIV_EXPR:
if (r != op0 && r != op1)
memset (r, '\0', sizeof (*r));
return do_divide (r, op0, op1);
case MIN_EXPR:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment