aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2009-09-09 18:50:15 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2009-09-09 18:50:15 +0200
commitca1bb752ae969b8ccf8e46069e78c7568252074e (patch)
tree113f0fc8dd57d62f377daa8e58341c88eb00a378 /gcc/tree-sra.c
parent8b9db065c6b55cb5077d86a377c2015ef429e326 (diff)
downloadgcc-ca1bb752ae969b8ccf8e46069e78c7568252074e.zip
gcc-ca1bb752ae969b8ccf8e46069e78c7568252074e.tar.gz
gcc-ca1bb752ae969b8ccf8e46069e78c7568252074e.tar.bz2
re PR target/41089 (stdarg pass produces wrong code)
2009-09-09 Martin Jambor <mjambor@suse.cz> PR tree-optimization/41089 * tree-sra.c (find_var_candidates): Do not consider va_lists in early SRA. From-SVN: r151566
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 431c456..1a0622e 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1165,7 +1165,13 @@ find_var_candidates (void)
|| !COMPLETE_TYPE_P (type)
|| !host_integerp (TYPE_SIZE (type), 1)
|| tree_low_cst (TYPE_SIZE (type), 1) == 0
- || type_internals_preclude_sra_p (type))
+ || type_internals_preclude_sra_p (type)
+ /* Fix for PR 41089. tree-stdarg.c needs to have va_lists intact but
+ 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))))
continue;
bitmap_set_bit (candidate_bitmap, DECL_UID (var));