diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ipa-cp.c | 4 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr44915.C | 13 |
5 files changed, 34 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e674f39..1701a54 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2010-07-23 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/44915 + * ipa-cp.c (cgraph_gate_cp): Also check that optimize is true. + * ipa-inline.c (cgraph_mark_inline_edge): Likewise. + (analyze_function): Likewise. + +2010-07-23 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/44914 * tree-sra.c (sra_modify_function_body): Return true if CFG was changed, add purging dead eh edges. diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index be19569..6918273 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -1278,7 +1278,9 @@ ipcp_read_summary (void) static bool cgraph_gate_cp (void) { - return flag_ipa_cp; + /* FIXME: We should remove the optimize check after we ensure we never run + IPA passes when not optimizng. */ + return flag_ipa_cp && optimize; } struct ipa_opt_pass_d pass_ipa_cp = diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index b9e6844..b5063bf 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -334,7 +334,9 @@ cgraph_mark_inline_edge (struct cgraph_edge *e, bool update_original, overall_size += new_size - old_size; ncalls_inlined++; - if (flag_indirect_inlining) + /* FIXME: We should remove the optimize check after we ensure we never run + IPA passes when not optimizng. */ + if (flag_indirect_inlining && optimize) return ipa_propagate_indirect_call_infos (curr, new_edges); else return false; @@ -2085,7 +2087,9 @@ analyze_function (struct cgraph_node *node) current_function_decl = node->decl; compute_inline_parameters (node); - if (flag_indirect_inlining) + /* FIXME: We should remove the optimize check after we ensure we never run + IPA passes when not optimizng. */ + if (flag_indirect_inlining && optimize) inline_indirect_intraprocedural_analysis (node); current_function_decl = NULL; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd8615f..9000fab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-07-23 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/44915 + * g++.dg/torture/pr44915.C: New test. + +2010-07-23 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/44914 * g++.dg/tree-ssa/pr44914.C: New test. diff --git a/gcc/testsuite/g++.dg/torture/pr44915.C b/gcc/testsuite/g++.dg/torture/pr44915.C new file mode 100644 index 0000000..ba7e966 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr44915.C @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-findirect-inlining" } */ + +struct A; + +typedef void (A::*f_ptr) (); + +void dummy (f_ptr) { } + +void call_dummy (f_ptr cb) +{ + dummy (cb); +} |