diff options
author | Richard Biener <rguenther@suse.de> | 2014-11-04 20:46:52 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-11-04 20:46:52 +0000 |
commit | 6f450181421ef6e8c2e489394d29f2828f96d38f (patch) | |
tree | 2652446d45b5c68878089d94affc3499cd8ad337 | |
parent | 673fade339ee671ef26258d9ece2f3947fb43a19 (diff) | |
download | gcc-6f450181421ef6e8c2e489394d29f2828f96d38f.zip gcc-6f450181421ef6e8c2e489394d29f2828f96d38f.tar.gz gcc-6f450181421ef6e8c2e489394d29f2828f96d38f.tar.bz2 |
c-common.c (shorten_compare): Do not shorten mixed DFP and non-DFP compares.
2014-11-04 Richard Biener <rguenther@suse.de>
* c-common.c (shorten_compare): Do not shorten mixed
DFP and non-DFP compares.
From-SVN: r217101
-rw-r--r-- | gcc/c-family/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index a28ef60..861ba07 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2014-11-04 Richard Biener <rguenther@suse.de> + + * c-common.c (shorten_compare): Do not shorten mixed + DFP and non-DFP compares. + 2014-11-01 Edward Smith-Rowland <3dw4rd@verizon.net> * g++.dg/cpp1y/feat-cxx11.C: Commentary and rearrangement of tests. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 03137fe..532923c 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -4314,9 +4314,15 @@ shorten_compare (location_t loc, tree *op0_ptr, tree *op1_ptr, /* If either arg is decimal float and the other is float, find the proper common type to use for comparison. */ else if (real1 && real2 + && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0))) + && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))) + type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1)); + + /* If either arg is decimal float and the other is float, fail. */ + else if (real1 && real2 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0))) || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1))))) - type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1)); + return 0; else if (real1 && real2 && (TYPE_PRECISION (TREE_TYPE (primop0)) |