From 9e64f17d044767248175fece80a2759d94c45fc4 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 23 Sep 2020 10:11:03 +0200 Subject: [PATCH] tree-optimization/97151 - improve PTA for C++ operator delete C++ operator delete, when DECL_IS_REPLACEABLE_OPERATOR_DELETE_P, does not cause the deleted object to be escaped. It also has no other interesting side-effects for PTA so skip it like we do for BUILT_IN_FREE. 2020-09-23 Richard Biener PR tree-optimization/97151 * tree-ssa-structalias.c (find_func_aliases_for_call): DECL_IS_REPLACEABLE_OPERATOR_DELETE_P has no effect on arguments. * g++.dg/cpp1y/new1.C: Adjust for two more handled transforms. --- gcc/testsuite/g++.dg/cpp1y/new1.C | 4 ++-- gcc/tree-ssa-structalias.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/cpp1y/new1.C b/gcc/testsuite/g++.dg/cpp1y/new1.C index aa5f647d535..fec0088cb40 100644 --- a/gcc/testsuite/g++.dg/cpp1y/new1.C +++ b/gcc/testsuite/g++.dg/cpp1y/new1.C @@ -69,5 +69,5 @@ test_unused() { delete p; } -/* { dg-final { scan-tree-dump-times "Deleting : operator delete" 5 "cddce1"} } */ -/* { dg-final { scan-tree-dump-times "Deleting : _\\d+ = operator new" 7 "cddce1"} } */ +/* { dg-final { scan-tree-dump-times "Deleting : operator delete" 6 "cddce1"} } */ +/* { dg-final { scan-tree-dump-times "Deleting : _\\d+ = operator new" 8 "cddce1"} } */ diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 44fe52e0f65..f676bf91e95 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4857,6 +4857,8 @@ find_func_aliases_for_call (struct function *fn, gcall *t) point for reachable memory of their arguments. */ else if (flags & (ECF_PURE|ECF_LOOPING_CONST_OR_PURE)) handle_pure_call (t, &rhsc); + else if (fndecl && DECL_IS_REPLACEABLE_OPERATOR_DELETE_P (fndecl)) + ; else handle_rhs_call (t, &rhsc); if (gimple_call_lhs (t)) -- 2.30.2