From 3c45b96b27d5be00740b13ad80ae6c6be9c96dbc Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 6 Sep 2009 16:48:41 +0000 Subject: [PATCH] re PR middle-end/41261 (ice with -O2 -fprofile-arcs when compiling Linux kernel) 2009-09-06 Richard Guenther PR middle-end/41261 * tree-ssa-alias.c (refs_may_alias_p_1): Bail out for function decls. * gcc.dg/torture/pr41261.c: New testcase. From-SVN: r151460 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr41261.c | 8 ++++++++ gcc/tree-ssa-alias.c | 6 ++++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr41261.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6edcba28b1c6..80be0453ef36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-09-06 Richard Guenther + + PR middle-end/41261 + * tree-ssa-alias.c (refs_may_alias_p_1): Bail out for function decls. + 2009-09-05 Richard Guenther PR middle-end/41181 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7258ffaac56f..4712bc5e9b50 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-06 Richard Guenther + + PR middle-end/41261 + * gcc.dg/torture/pr41261.c: New testcase. + 2009-09-05 Richard Guenther PR middle-end/41181 diff --git a/gcc/testsuite/gcc.dg/torture/pr41261.c b/gcc/testsuite/gcc.dg/torture/pr41261.c new file mode 100644 index 000000000000..8e601555cb5d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr41261.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-fprofile-arcs" } */ + +extern void relocate_kernel(); +void machine_kexec(void *control_page) +{ + __builtin_memcpy(control_page, relocate_kernel, 2048); +} diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 7e83a84b82ce..89804a923b19 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -784,6 +784,12 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2, bool tbaa_p) || is_gimple_min_invariant (base2)) return false; + /* We can end up refering to code via function decls. As we likely + do not properly track code aliases conservatively bail out. */ + if (TREE_CODE (base1) == FUNCTION_DECL + || TREE_CODE (base2) == FUNCTION_DECL) + return true; + /* Defer to simple offset based disambiguation if we have references based on two decls. Do this before defering to TBAA to handle must-alias cases in conformance with the -- 2.47.2