aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/gcc/cp
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2012-09-13 00:20:51 -0700
committerAndrew Hsieh <andrewhsieh@google.com>2012-09-13 00:20:51 -0700
commit21fa14c8dba6b615564beff6b4e60f2b54f530ae (patch)
tree7c44e538ece9939c36ba10b9692f4ce02dbca87d /gcc-4.4.3/gcc/cp
parent5d8cb1af30dc348b89a0dfc4a00ef6ab0b466d66 (diff)
downloadtoolchain_gcc-21fa14c8dba6b615564beff6b4e60f2b54f530ae.tar.gz
toolchain_gcc-21fa14c8dba6b615564beff6b4e60f2b54f530ae.tar.bz2
toolchain_gcc-21fa14c8dba6b615564beff6b4e60f2b54f530ae.zip
Fix GCC 4.4.3 crashes on NEON specific typedef for float
Backport the following: r152030, r152242, r152408, and r153858 Related issue: http://code.google.com/p/android/issues/detail?id=34613 Change-Id: I44563f618220fbe9e01915962fe411ac2f385bbb
Diffstat (limited to 'gcc-4.4.3/gcc/cp')
-rw-r--r--gcc-4.4.3/gcc/cp/call.c3
-rw-r--r--gcc-4.4.3/gcc/cp/mangle.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc-4.4.3/gcc/cp/call.c b/gcc-4.4.3/gcc/cp/call.c
index 4eb1974c0..9a1953e8c 100644
--- a/gcc-4.4.3/gcc/cp/call.c
+++ b/gcc-4.4.3/gcc/cp/call.c
@@ -4948,7 +4948,8 @@ convert_arg_to_ellipsis (tree arg)
promoted type before the call. */
if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
&& (TYPE_PRECISION (TREE_TYPE (arg))
- < TYPE_PRECISION (double_type_node)))
+ < TYPE_PRECISION (double_type_node))
+ && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (arg))))
arg = convert_to_real (double_type_node, arg);
else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
arg = perform_integral_promotions (arg);
diff --git a/gcc-4.4.3/gcc/cp/mangle.c b/gcc-4.4.3/gcc/cp/mangle.c
index 0d07082d2..c7c223913 100644
--- a/gcc-4.4.3/gcc/cp/mangle.c
+++ b/gcc-4.4.3/gcc/cp/mangle.c
@@ -1851,6 +1851,12 @@ write_builtin_type (tree type)
write_char ('d');
else if (type == long_double_type_node)
write_char ('e');
+ else if (type == dfloat32_type_node)
+ write_string ("Df");
+ else if (type == dfloat64_type_node)
+ write_string ("Dd");
+ else if (type == dfloat128_type_node)
+ write_string ("De");
else
gcc_unreachable ();
break;