From: rguenth Date: Sun, 9 May 2010 18:17:33 +0000 (+0000) Subject: 2010-05-09 Richard Guenther X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3760428fe7d598ecb20f6439eb0da84fbcea3830;p=thirdparty%2Fgcc.git 2010-05-09 Richard Guenther PR middle-end/44024 * fold-const.c (tree_single_nonzero_warnv_p): Properly handle &FUNCTION_DECL. * gcc.dg/pr44024.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159205 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8879737b91cd..6551ac0ca53e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-09 Richard Guenther + + PR middle-end/44024 + * fold-const.c (tree_single_nonzero_warnv_p): Properly + handle &FUNCTION_DECL. + 2010-05-09 Joseph Myers PR c/4784 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ffd9d30ef2e0..17a753692d50 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -14917,7 +14917,9 @@ tree_single_nonzero_warnv_p (tree t, bool *strict_overflow_p) case ADDR_EXPR: { - tree base = get_base_address (TREE_OPERAND (t, 0)); + tree base = TREE_OPERAND (t, 0); + if (!DECL_P (base)) + base = get_base_address (base); if (!base) return false; @@ -14927,7 +14929,9 @@ tree_single_nonzero_warnv_p (tree t, bool *strict_overflow_p) allocated on the stack. */ if (DECL_P (base) && (flag_delete_null_pointer_checks - || (TREE_CODE (base) == VAR_DECL && !TREE_STATIC (base)))) + || (DECL_CONTEXT (base) + && TREE_CODE (DECL_CONTEXT (base)) == FUNCTION_DECL + && auto_var_in_fn_p (base, DECL_CONTEXT (base))))) return !VAR_OR_FUNCTION_DECL_P (base) || !DECL_WEAK (base); /* Constants are never weak. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf4140d7691b..f0a10bba3919 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-09 Richard Guenther + + PR middle-end/44024 + * gcc.dg/pr44024.c: New testcase. + 2010-05-09 Joseph Myers PR c/4784 diff --git a/gcc/testsuite/gcc.dg/pr44024.c b/gcc/testsuite/gcc.dg/pr44024.c new file mode 100644 index 000000000000..38f41532f95d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44024.c @@ -0,0 +1,14 @@ +/* { dg-do link } */ +/* { dg-options "-fdelete-null-pointer-checks -fdump-tree-original" } */ + +void foo(); + +int main() +{ + if (foo == (void *)0) + link_error (); + return 0; +} + +/* { dg-final { scan-tree-dump-not "foo" "original" } } */ +/* { dg-final { cleanup-tree-dump "original" } } */