aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-05-26 17:27:55 -0400
committerJason Merrill <jason@redhat.com>2020-05-27 10:05:57 -0400
commit6c66c692043d680a5efcd9616b94f9629c417038 (patch)
treeccf545124706b2d7e2a4103c0361b9fcef648af8 /gcc
parent7e7d9fcff56385812764cba63e1ebf6f4c6c0320 (diff)
downloadgcc-6c66c692043d680a5efcd9616b94f9629c417038.zip
gcc-6c66c692043d680a5efcd9616b94f9629c417038.tar.gz
gcc-6c66c692043d680a5efcd9616b94f9629c417038.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/call.c1
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C3
2 files changed, 4 insertions, 0 deletions
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index d858288..a51ebb5 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6410,6 +6410,7 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
tree rhs = integer_zero_node;
if (cand->reversed ())
std::swap (lhs, rhs);
+ warning_sentinel ws (warn_zero_as_null_pointer_constant);
result = build_new_op (loc, code,
LOOKUP_NORMAL|LOOKUP_REWRITTEN,
lhs, rhs, NULL_TREE,
diff --git a/gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C b/gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C
index e6401d2..9b6cfa0 100644
--- a/gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C
+++ b/gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C
@@ -1,6 +1,9 @@
// Test with only spaceship defaulted.
// { dg-do run { target c++20 } }
+// Add this warning to test PR c++/95242
+// { dg-additional-options -Wzero-as-null-pointer-constant }
+
#include <compare>
struct D