diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62a1c43..a77df07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-10 Paolo Bonzini <bonzini@gnu.org> + + PR middle-end/39701 + * fold-const.c (tree_single_nonzero_warnv_p): Pass non-static + variables as non-NULL even with -fdelete-null-pointer-checks. + 2009-04-10 H.J. Lu <hongjiu.lu@intel.com> * config/rs6000/darwin-vecsave.asm: Remove extra "*/". diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 821e581..dd2f62d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -15017,8 +15017,12 @@ tree_single_nonzero_warnv_p (tree t, bool *strict_overflow_p) if (!base) return false; - /* Weak declarations may link to NULL. */ - if (DECL_P (base) && flag_delete_null_pointer_checks) + /* Weak declarations may link to NULL. Other things may also be NULL + so protect with -fdelete-null-pointer-checks; but not variables + allocated on the stack. */ + if (DECL_P (base) + && (flag_delete_null_pointer_checks + || (TREE_CODE (base) == VAR_DECL && !TREE_STATIC (base)))) return !VAR_OR_FUNCTION_DECL_P (base) || !DECL_WEAK (base); /* Constants are never weak. */ |