diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2013-08-26 16:22:37 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2013-08-26 17:22:37 +0100 |
commit | 2531a1d9f4bd1be785c98decc0b372c70edef943 (patch) | |
tree | 1e8ec131e647ea7dbc800e7b97c186b14736f55a /gcc/c | |
parent | d6d989fc197ee6387bfd2e0ea2652ff69d1f61bc (diff) | |
download | gcc-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/c')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-typeck.c | 11 |
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) |