Commit fac77bd8 by Jason Merrill

c++: operator<=> and -Wzero-as-null-pointer-constant [PR95242]

In C++20, if there is no viable operator< available, lhs < rhs gets
rewritten to (lhs <=> rhs) < 0, where operator< for the comparison
categories is intended to accept literal 0 on the RHS but not other
integers.  We don't want this to produce a warning from
-Wzero-as-null-pointer-constant.

gcc/cp/ChangeLog:

	* call.c (build_new_op_1): Suppress
	warn_zero_as_null_pointer_constant across comparison of <=> result
	to 0.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/spaceship-synth2.C: Add
	-Wzero-as-null-pointer-constant.

(cherry picked from commit 6c66c692043d680a5efcd9616b94f9629c417038)
parent 0c473d8f
...@@ -6391,6 +6391,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags, ...@@ -6391,6 +6391,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
tree rhs = integer_zero_node; tree rhs = integer_zero_node;
if (cand->reversed ()) if (cand->reversed ())
std::swap (lhs, rhs); std::swap (lhs, rhs);
warning_sentinel ws (warn_zero_as_null_pointer_constant);
result = build_new_op (loc, code, result = build_new_op (loc, code,
LOOKUP_NORMAL|LOOKUP_REWRITTEN, LOOKUP_NORMAL|LOOKUP_REWRITTEN,
lhs, rhs, NULL_TREE, lhs, rhs, NULL_TREE,
......
// Test with only spaceship defaulted. // Test with only spaceship defaulted.
// { dg-do run { target c++2a } } // { dg-do run { target c++2a } }
// Add this warning to test PR c++/95242
// { dg-additional-options -Wzero-as-null-pointer-constant }
#include <compare> #include <compare>
struct D struct D
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment