Commit d33e4b70 by Sandra Loosemore Committed by Sandra Loosemore

fold-const.c (fold_convert_const_real_from_real): Check for overflow.

2009-05-15  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* fold-const.c (fold_convert_const_real_from_real): Check for
	overflow.

From-SVN: r147589
parent a02ab464
2009-05-15 Sandra Loosemore <sandra@codesourcery.com>
* fold-const.c (fold_convert_const_real_from_real): Check for
overflow.
2009-05-15 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_reorg): Call optimize_function_for_speed_p
......
......@@ -2327,7 +2327,24 @@ fold_convert_const_real_from_real (tree type, const_tree arg1)
real_convert (&value, TYPE_MODE (type), &TREE_REAL_CST (arg1));
t = build_real (type, value);
TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
/* If converting an infinity or NAN to a representation that doesn't
have one, set the overflow bit so that we can produce some kind of
error message at the appropriate point if necessary. It's not the
most user-friendly message, but it's better than nothing. */
if (REAL_VALUE_ISINF (TREE_REAL_CST (arg1))
&& !MODE_HAS_INFINITIES (TYPE_MODE (type)))
TREE_OVERFLOW (t) = 1;
else if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1))
&& !MODE_HAS_NANS (TYPE_MODE (type)))
TREE_OVERFLOW (t) = 1;
/* Regular overflow, conversion produced an infinity in a mode that
can't represent them. */
else if (!MODE_HAS_INFINITIES (TYPE_MODE (type))
&& REAL_VALUE_ISINF (value)
&& !REAL_VALUE_ISINF (TREE_REAL_CST (arg1)))
TREE_OVERFLOW (t) = 1;
else
TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
return t;
}
......
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