diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-05-10 08:05:20 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-05-10 08:05:20 +0200 |
commit | e7f7802150169bf0ec2b8a3ad309c53f87280927 (patch) | |
tree | 6662d230285c32d3a4907f4ab10a6a31374e848c /gcc/dfp.c | |
parent | 321f4ead0f5d7164b52117c50ce70598cc621b7c (diff) | |
download | gcc-e7f7802150169bf0ec2b8a3ad309c53f87280927.zip gcc-e7f7802150169bf0ec2b8a3ad309c53f87280927.tar.gz gcc-e7f7802150169bf0ec2b8a3ad309c53f87280927.tar.bz2 |
re PR debug/48928 (ICE: in decimal_to_decnumber, at dfp.c:113 with -O -g and decimal float)
PR debug/48928
* dfp.c (decimal_to_decnumber): Handle conversion from
dconst{1,2,m1,half}.
* gcc.dg/dfp/pr48928.c: New test.
From-SVN: r173606
Diffstat (limited to 'gcc/dfp.c')
-rw-r--r-- | gcc/dfp.c | 32 |
1 files changed, 29 insertions, 3 deletions
@@ -1,6 +1,6 @@ /* Decimal floating point support. - Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software - Foundation, Inc. + Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. This file is part of GCC. @@ -110,7 +110,33 @@ decimal_to_decnumber (const REAL_VALUE_TYPE *r, decNumber *dn) decNumberFromString (dn, "nan", &set); break; case rvc_normal: - gcc_assert (r->decimal); + if (!r->decimal) + { + /* dconst{1,2,m1,half} are used in various places in + the middle-end and optimizers, allow them here + as an exception by converting them to decimal. */ + if (memcmp (r, &dconst1, sizeof (*r)) == 0) + { + decNumberFromString (dn, "1", &set); + break; + } + if (memcmp (r, &dconst2, sizeof (*r)) == 0) + { + decNumberFromString (dn, "2", &set); + break; + } + if (memcmp (r, &dconstm1, sizeof (*r)) == 0) + { + decNumberFromString (dn, "-1", &set); + break; + } + if (memcmp (r, &dconsthalf, sizeof (*r)) == 0) + { + decNumberFromString (dn, "0.5", &set); + break; + } + gcc_unreachable (); + } decimal128ToNumber ((const decimal128 *) r->sig, dn); break; default: |