aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2009-10-01 13:30:12 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2009-10-01 13:30:12 +0200
commit1e9fb3de50e50526cbdd52a9d42b58645d388cee (patch)
tree2b36a7ca1f884b5f4dabc1ab542709cafddda36e /gcc/tree-sra.c
parented9fa133106bd11f893b5bb809bc14f4be8df351 (diff)
downloadgcc-1e9fb3de50e50526cbdd52a9d42b58645d388cee.zip
gcc-1e9fb3de50e50526cbdd52a9d42b58645d388cee.tar.gz
gcc-1e9fb3de50e50526cbdd52a9d42b58645d388cee.tar.bz2
re PR bootstrap/41395 (Revision 151800 failed bootstrap)
2009-10-01 Martin Jambor <mjambor@suse.cz> PR bootstrap/41395 * tree-sra.c (is_va_list_type): New function. (find_var_candidates): Call is_va_list_type. (find_param_candidates): Check that the type or the type pointed to are not va_list types. From-SVN: r152366
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 92dab57..e5b141f 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1323,6 +1323,14 @@ build_ref_for_offset (tree *expr, tree type, HOST_WIDE_INT offset,
return build_ref_for_offset_1 (expr, type, offset, exp_type);
}
+/* Return true iff TYPE is stdarg va_list type. */
+
+static inline bool
+is_va_list_type (tree type)
+{
+ return TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (va_list_type_node);
+}
+
/* The very first phase of intraprocedural SRA. It marks in candidate_bitmap
those with type which is suitable for scalarization. */
@@ -1350,8 +1358,7 @@ find_var_candidates (void)
we also want to schedule it rather late. Thus we ignore it in
the early pass. */
|| (sra_mode == SRA_MODE_EARLY_INTRA
- && (TYPE_MAIN_VARIANT (TREE_TYPE (var))
- == TYPE_MAIN_VARIANT (va_list_type_node))))
+ && is_va_list_type (type)))
continue;
bitmap_set_bit (candidate_bitmap, DECL_UID (var));
@@ -2731,11 +2738,13 @@ find_param_candidates (void)
parm;
parm = TREE_CHAIN (parm))
{
- tree type;
+ tree type = TREE_TYPE (parm);
count++;
+
if (TREE_THIS_VOLATILE (parm)
- || TREE_ADDRESSABLE (parm))
+ || TREE_ADDRESSABLE (parm)
+ || is_va_list_type (type))
continue;
if (is_unused_scalar_param (parm))
@@ -2744,7 +2753,6 @@ find_param_candidates (void)
continue;
}
- type = TREE_TYPE (parm);
if (POINTER_TYPE_P (type))
{
type = TREE_TYPE (type);
@@ -2752,6 +2760,7 @@ find_param_candidates (void)
if (TREE_CODE (type) == FUNCTION_TYPE
|| TYPE_VOLATILE (type)
|| !is_gimple_reg (parm)
+ || is_va_list_type (type)
|| ptr_parm_has_direct_uses (parm))
continue;
}