aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-11-04 20:46:52 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-11-04 20:46:52 +0000
commit6f450181421ef6e8c2e489394d29f2828f96d38f (patch)
tree2652446d45b5c68878089d94affc3499cd8ad337
parent673fade339ee671ef26258d9ece2f3947fb43a19 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c8
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))