c-common.c (shorten_compare): Do not shorten mixed DFP and non-DFP compares.
authorRichard Biener <rguenther@suse.de>
Tue, 4 Nov 2014 20:46:52 +0000 (20:46 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 4 Nov 2014 20:46:52 +0000 (20:46 +0000)
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

gcc/c-family/ChangeLog
gcc/c-family/c-common.c

index a28ef60..861ba07 100644 (file)
@@ -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.
index 03137fe..532923c 100644 (file)
@@ -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))