aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2013-08-26 16:22:37 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2013-08-26 17:22:37 +0100
commit2531a1d9f4bd1be785c98decc0b372c70edef943 (patch)
tree1e8ec131e647ea7dbc800e7b97c186b14736f55a /gcc
parentd6d989fc197ee6387bfd2e0ea2652ff69d1f61bc (diff)
downloadgcc-2531a1d9f4bd1be785c98decc0b372c70edef943.zip
gcc-2531a1d9f4bd1be785c98decc0b372c70edef943.tar.gz
gcc-2531a1d9f4bd1be785c98decc0b372c70edef943.tar.bz2
c-typeck.c (c_common_type): Prefer double_type_node over other REAL_TYPE types with the same precision.
* c-typeck.c (c_common_type): Prefer double_type_node over other REAL_TYPE types with the same precision. (convert_arguments): Likewise. From-SVN: r202004
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-typeck.c11
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 574e7c0..4d32d6d 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2013-08-26 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * c-typeck.c (c_common_type): Prefer double_type_node over
+ other REAL_TYPE types with the same precision.
+ (convert_arguments): Likewise.
+
2013-08-23 Gabriel Dos Reis <gdr@integrable-solutions.net>
* c-objc-common.c (c_tree_printer): Document the nature of the cast.
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 30871db..5daae23 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -919,6 +919,13 @@ c_common_type (tree t1, tree t2)
|| TYPE_MAIN_VARIANT (t2) == long_double_type_node)
return long_double_type_node;
+ /* Likewise, prefer double to float even if same size.
+ We got a couple of embedded targets with 32 bit doubles, and the
+ pdp11 might have 64 bit floats. */
+ if (TYPE_MAIN_VARIANT (t1) == double_type_node
+ || TYPE_MAIN_VARIANT (t2) == double_type_node)
+ return double_type_node;
+
/* Otherwise prefer the unsigned one. */
if (TYPE_UNSIGNED (t1))
@@ -3156,7 +3163,9 @@ convert_arguments (tree typelist, vec<tree, va_gc> *values,
}
else if (TREE_CODE (valtype) == REAL_TYPE
&& (TYPE_PRECISION (valtype)
- < TYPE_PRECISION (double_type_node))
+ <= TYPE_PRECISION (double_type_node))
+ && valtype != double_type_node
+ && valtype != long_double_type_node
&& !DECIMAL_FLOAT_MODE_P (TYPE_MODE (valtype)))
{
if (type_generic)