Hi, this is the simplest fix for the PR which happens because there is no VDEF on a stmt if a particular function is not optimized. I'd like to fix the bug with it on the branch. Bootstrapped and tested on x86_64-linux. OK?
Thanks, Martin 2013-06-11 Martin Jambor <mjam...@suse.cz> PR tree-optimization/57358 * ipa-prop.c (parm_ref_data_preserved_p): Always return true when not optimizing. testsuite/ * gcc.dg/ipa/pr57358.c: New test. diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 53cd5ed..c62dc68 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -678,13 +678,19 @@ parm_ref_data_preserved_p (struct param_analysis_info *parm_ainfo, bool modified = false; ao_ref refd; - gcc_checking_assert (gimple_vuse (stmt)); if (parm_ainfo && parm_ainfo->ref_modified) return false; - ao_ref_init (&refd, ref); - walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified, - NULL); + if (optimize) + { + gcc_checking_assert (gimple_vuse (stmt)); + ao_ref_init (&refd, ref); + walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified, + NULL); + } + else + modified = true; + if (parm_ainfo && modified) parm_ainfo->ref_modified = true; return !modified; diff --git a/gcc/testsuite/gcc.dg/ipa/pr57358.c b/gcc/testsuite/gcc.dg/ipa/pr57358.c new file mode 100644 index 0000000..c83396f --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr57358.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct t { void (*func)(void*); }; +void test_func(struct t* a) __attribute__((optimize("O0"))); +void test_func(struct t* a) +{ + a->func(0); +}