From f0aaf8c1ae527f5b2da2f6d7b714f2b9b0bbc317 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Fri, 4 Oct 2013 01:48:18 +0200 Subject: [PATCH] re PR c++/19476 (Missed null checking elimination with new) 2013-10-04 Marc Glisse PR c++/19476 gcc/cp/ * decl.c (cxx_init_decl_processing): Set operator_new_flag. gcc/testsuite/ * g++.dg/tree-ssa/pr19476-5.C: New file. * g++.dg/tree-ssa/pr19476-1.C: Mention pr19476-5.C. From-SVN: r203194 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 4 ++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C | 1 + gcc/testsuite/g++.dg/tree-ssa/{pr19476-1.C => pr19476-5.C} | 6 +----- 5 files changed, 15 insertions(+), 7 deletions(-) copy gcc/testsuite/g++.dg/tree-ssa/{pr19476-1.C => pr19476-5.C} (63%) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f618475d85b..6327c0b8a66 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-10-04 Marc Glisse + + PR c++/19476 + * decl.c (cxx_init_decl_processing): Set operator_new_flag. + 2013-10-04 Paolo Carlini PR c++/58584 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 80ceca138d8..81ed409b963 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3800,8 +3800,8 @@ cxx_init_decl_processing (void) newtype = build_exception_variant (newtype, new_eh_spec); deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr); deltype = build_exception_variant (deltype, empty_except_spec); - push_cp_library_fn (NEW_EXPR, newtype, 0); - push_cp_library_fn (VEC_NEW_EXPR, newtype, 0); + DECL_IS_OPERATOR_NEW (push_cp_library_fn (NEW_EXPR, newtype, 0)) = 1; + DECL_IS_OPERATOR_NEW (push_cp_library_fn (VEC_NEW_EXPR, newtype, 0)) = 1; global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW); push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d631f0f5775..a06e9c55639 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-10-04 Marc Glisse + + PR c++/19476 + * g++.dg/tree-ssa/pr19476-5.C: New file. + * g++.dg/tree-ssa/pr19476-1.C: Mention pr19476-5.C. + 2013-10-04 Paolo Carlini PR c++/58584 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C b/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C index f0fb8d6d1f4..cbdad90d16b 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O -fdump-tree-ccp1" } */ +// See pr19476-5.C for a version without including . #include int f(){ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C b/gcc/testsuite/g++.dg/tree-ssa/pr19476-5.C similarity index 63% copy from gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C copy to gcc/testsuite/g++.dg/tree-ssa/pr19476-5.C index f0fb8d6d1f4..bec0bb58b6c 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr19476-1.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr19476-5.C @@ -1,15 +1,11 @@ /* { dg-do compile } */ /* { dg-options "-O -fdump-tree-ccp1" } */ -#include +// See pr19476-1.C for a version that includes . -int f(){ - return 33 + (0 == new(std::nothrow) int); -} int g(){ return 42 + (0 == new int[50]); } /* { dg-final { scan-tree-dump "return 42" "ccp1" } } */ -/* { dg-final { scan-tree-dump-not "return 33" "ccp1" } } */ /* { dg-final { cleanup-tree-dump "ccp1" } } */ -- 2.11.4.GIT