From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id 800C4395B46E; Fri, 13 May 2022 17:41:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 800C4395B46E MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r9-10172] c++: operator new lookup [PR98249] X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/releases/gcc-9 X-Git-Oldrev: 7b4bd8dbd8d07e298528b0f033102ce8f693e739 X-Git-Newrev: 86d50501e487597d8b97f40d1c87dfcd694a9441 Message-Id: <20220513174143.800C4395B46E@sourceware.org> Date: Fri, 13 May 2022 17:41:43 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 May 2022 17:41:43 -0000 https://gcc.gnu.org/g:86d50501e487597d8b97f40d1c87dfcd694a9441 commit r9-10172-g86d50501e487597d8b97f40d1c87dfcd694a9441 Author: Jason Merrill Date: Mon Apr 11 13:06:05 2022 -0400 c++: operator new lookup [PR98249] The standard says, as we quote in the comment just above, that if we don't find operator new in the allocated type, it should be looked up in the global scope. This is specifically ::, not just any namespace, and we already give an error for an operator new declared in any other namespace. PR c++/98249 gcc/cp/ChangeLog: * call.c (build_operator_new_call): Just look in ::. gcc/testsuite/ChangeLog: * g++.dg/lookup/new3.C: New test. Diff: --- gcc/cp/call.c | 1 - gcc/testsuite/g++.dg/lookup/new3.C | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 65fbff3b893..53ca229b909 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4584,7 +4584,6 @@ build_operator_new_call (tree fnname, vec **args, we disregard block-scope declarations of "operator new". */ fns = lookup_name_real (fnname, 0, 1, /*block_p=*/false, 0, 0); - fns = lookup_arg_dependent (fnname, fns, *args); if (align_arg) { diff --git a/gcc/testsuite/g++.dg/lookup/new3.C b/gcc/testsuite/g++.dg/lookup/new3.C new file mode 100644 index 00000000000..36afb5b48e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/new3.C @@ -0,0 +1,10 @@ +// PR c++/98249 + +#include +struct Incomplete; +template struct Holder { T t; }; +Holder *p; +void test() { + ::new (p) int; + new (p) int; +}