On Mon, Sep 09, 2013 at 10:49:40PM +0200, Marc Glisse wrote:
> --- fold-const.c      (revision 202413)
> +++ fold-const.c      (working copy)
> @@ -16171,21 +16171,31 @@ tree_expr_nonzero_warnv_p (tree t, bool
>      case MODIFY_EXPR:
>      case BIND_EXPR:
>        return tree_expr_nonzero_warnv_p (TREE_OPERAND (t, 1),
>                                       strict_overflow_p);
>  
>      case SAVE_EXPR:
>        return tree_expr_nonzero_warnv_p (TREE_OPERAND (t, 0),
>                                       strict_overflow_p);
>  
>      case CALL_EXPR:
> -      return alloca_call_p (t);
> +      {
> +     tree fn = CALL_EXPR_FN (t);
> +     if (TREE_CODE (fn) != ADDR_EXPR) return false;
> +     tree fndecl = TREE_OPERAND (fn, 0);
> +     if (TREE_CODE (fndecl) != FUNCTION_DECL) return false;
> +     if (flag_delete_null_pointer_checks && !flag_check_new
> +         && DECL_IS_OPERATOR_NEW (fndecl)
> +         && !TREE_NOTHROW (fndecl))
> +       return true;
> +     return alloca_call_p (t);

Not commenting on what this patch does, but how:
why don't you use tree fndecl = get_callee_fndecl (t);
if (fndecl && ...) return true; instead?  Perhaps alloca_call_p should use
it too.

        Jakub

Reply via email to