From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id 0AC54385803E; Tue, 12 Apr 2022 20:14:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0AC54385803E 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 r11-9830] c++: operator new lookup [PR98249] X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: c52cd0b35d356565f67f7956f4defc022dfa2172 X-Git-Newrev: 7aa5f05583066f5b3146c999319288631c75597f Message-Id: <20220412201455.0AC54385803E@sourceware.org> Date: Tue, 12 Apr 2022 20:14:55 +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: Tue, 12 Apr 2022 20:14:55 -0000 https://gcc.gnu.org/g:7aa5f05583066f5b3146c999319288631c75597f commit r11-9830-g7aa5f05583066f5b3146c999319288631c75597f 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 13cb308f088..55bb9c45f8c 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4764,7 +4764,6 @@ build_operator_new_call (tree fnname, vec **args, we disregard block-scope declarations of "operator new". */ fns = lookup_name (fnname, LOOK_where::NAMESPACE); - 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; +}