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:
parent
5229689d71
commit
938d35bd4a
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
17
gcc/testsuite/gcc.dg/dfp/convert-bfp-12.c
Normal file
17
gcc/testsuite/gcc.dg/dfp/convert-bfp-12.c
Normal 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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user