diff options
author | Martin Jambor <mjambor@suse.cz> | 2009-09-09 18:50:15 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2009-09-09 18:50:15 +0200 |
commit | ca1bb752ae969b8ccf8e46069e78c7568252074e (patch) | |
tree | 113f0fc8dd57d62f377daa8e58341c88eb00a378 /gcc/tree-sra.c | |
parent | 8b9db065c6b55cb5077d86a377c2015ef429e326 (diff) | |
download | gcc-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.c | 8 |
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)); |