]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: extract_call_expr and C++20 rewritten ops
authorPatrick Palka <ppalka@redhat.com>
Thu, 7 Aug 2025 19:43:22 +0000 (15:43 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 7 Aug 2025 19:43:22 +0000 (15:43 -0400)
commit932b764be40bc675a65b89111bd28f31e99fcdbd
tree442122ea1bc7711a64b26c631f3df892d5291745
parentb163ea73dcd06657e29d881f53bc8a95bc2658c5
c++: extract_call_expr and C++20 rewritten ops

After r16-2519-gba5a6787374dea, we'll never express a C++20 rewritten
comparison operator as a built-in operator acting on an operator<=>
call, e.g. operator<=>(x, y) @ 0.  This is because operator<=> always
returns a class type (std::foo_ordering), so the outer operator@ will
necessarily resolve to a non-built-in operator@ for that class type
(even in the non-dependent templated case, after that commit).

So the corresponding handling in extract_call_expr is basically dead
code, except for the TRUTH_NOT_EXPR case where we can plausibly still
have !(operator==(x, y)), but it doesn't make sense to recognize just
that one special case of operator rewriting.  So let's just remove it
altogether; apparently it's no longer needed.

Also, the handling is imprecise: it recognizes expressions such as
0 < f() which never corresponded to a call in the first place.  All
the more reason to remove it.

gcc/cp/ChangeLog:

* call.cc (extract_call_expr): Remove handling of C++20
rewritten comparison operators.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/call.cc