From ca1bb752ae969b8ccf8e46069e78c7568252074e Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Wed, 9 Sep 2009 18:50:15 +0200 Subject: [PATCH] re PR target/41089 (stdarg pass produces wrong code) 2009-09-09 Martin Jambor PR tree-optimization/41089 * tree-sra.c (find_var_candidates): Do not consider va_lists in early SRA. From-SVN: r151566 --- gcc/ChangeLog | 6 ++++++ gcc/tree-sra.c | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22c92646399..ac2cded2a71 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-09-09 Martin Jambor + + PR tree-optimization/41089 + * tree-sra.c (find_var_candidates): Do not consider va_lists in + early SRA. + 2009-09-09 Richard Henderson * gimple.h (CASE_GIMPLE_OMP): New. diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 431c456e206..1a0622ef8eb 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));