convert.c (strip_float_extensions): Do not remove or introduce conversions between binary and decimal...

* convert.c (strip_float_extensions): Do not remove or introduce
	conversions between binary and decimal floating-point types.

testsuite:
	* gcc.dg/dfp/convert-bfp-12.c: New test.

From-SVN: r141407
This commit is contained in:
Joseph Myers 2008-10-28 12:10:18 +00:00 committed by Joseph Myers
parent 5229689d71
commit 938d35bd4a
4 changed files with 30 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2008-10-28 Joseph Myers <joseph@codesourcery.com>
* convert.c (strip_float_extensions): Do not remove or introduce
conversions between binary and decimal floating-point types.
2008-10-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/37931

View File

@ -81,7 +81,7 @@ strip_float_extensions (tree exp)
it properly and handle it like (type)(narrowest_type)constant.
This way we can optimize for instance a=a*2.0 where "a" is float
but 2.0 is double constant. */
if (TREE_CODE (exp) == REAL_CST)
if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
{
REAL_VALUE_TYPE orig;
tree type = NULL;
@ -108,6 +108,9 @@ strip_float_extensions (tree exp)
if (!FLOAT_TYPE_P (subt))
return exp;
if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
return exp;
if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
return exp;

View File

@ -1,3 +1,7 @@
2008-10-28 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/dfp/convert-bfp-12.c: New test.
2008-10-28 Jakub Jelinek <jakub@redhat.com>
PR middle-end/37931

View File

@ -0,0 +1,17 @@
/* Test for bug where fold wrongly removed conversions to double and
replaced them by conversions to float. */
/* { dg-options "-std=gnu99" } */
extern void abort (void);
extern void exit (int);
volatile float f = __builtin_inff ();
volatile _Decimal32 d32 = 1e40DF;
int
main (void)
{
if ((double) f == (double) d32)
abort ();
exit (0);
}