diff options
author | Patrick Palka <ppalka@redhat.com> | 2025-08-07 15:43:22 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2025-08-07 15:43:22 -0400 |
commit | 932b764be40bc675a65b89111bd28f31e99fcdbd (patch) | |
tree | 442122ea1bc7711a64b26c631f3df892d5291745 /gcc | |
parent | b163ea73dcd06657e29d881f53bc8a95bc2658c5 (diff) | |
download | gcc-932b764be40bc675a65b89111bd28f31e99fcdbd.zip gcc-932b764be40bc675a65b89111bd28f31e99fcdbd.tar.gz gcc-932b764be40bc675a65b89111bd28f31e99fcdbd.tar.bz2 |
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>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/call.cc | 22 |
1 files changed, 0 insertions, 22 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 9283d97..63cad2a 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -7904,28 +7904,6 @@ extract_call_expr (tree call) call = TREE_OPERAND (call, 0); if (TREE_CODE (call) == TARGET_EXPR) call = TARGET_EXPR_INITIAL (call); - if (cxx_dialect >= cxx20) - switch (TREE_CODE (call)) - { - /* C++20 rewritten comparison operators. */ - case TRUTH_NOT_EXPR: - call = TREE_OPERAND (call, 0); - break; - case LT_EXPR: - case LE_EXPR: - case GT_EXPR: - case GE_EXPR: - case SPACESHIP_EXPR: - { - tree op0 = TREE_OPERAND (call, 0); - if (integer_zerop (op0)) - call = TREE_OPERAND (call, 1); - else - call = op0; - } - break; - default:; - } if (TREE_CODE (call) != CALL_EXPR && TREE_CODE (call) != AGGR_INIT_EXPR |