]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: operator<=> and -Wzero-as-null-pointer-constant [PR95242]
authorJason Merrill <jason@redhat.com>
Tue, 26 May 2020 21:27:55 +0000 (17:27 -0400)
committerJason Merrill <jason@redhat.com>
Wed, 27 May 2020 14:11:19 +0000 (10:11 -0400)
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)

gcc/cp/call.c
gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C

index 8345997ccf9a54984f4bc85822aa35615dd35783..4a2754bcd1f703db557a72c39130590f2d39037c 100644 (file)
@@ -6391,6 +6391,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,
index cf23c9771e01328952c4d42eda807e755afa9eab..a064df72a49fbc304abfae331f4f216e42bf503b 100644 (file)
@@ -1,6 +1,9 @@
 // Test with only spaceship defaulted.
 // { dg-do run { target c++2a } }
 
+// Add this warning to test PR c++/95242
+// { dg-additional-options -Wzero-as-null-pointer-constant }
+
 #include <compare>
 
 struct D