On 7/16/21 6:34 PM, Jakub Jelinek wrote:
On Fri, Jul 16, 2021 at 05:36:13PM -0400, Marek Polacek via Gcc-patches wrote:
When implementing DR 1512 in r11-467 I neglected to reject ordered
comparison of two null pointers, like nullptr < nullptr. This patch
fixes that omission.
Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?
DR 1512
PR c++/99701
gcc/cp/ChangeLog:
* cp-gimplify.c (cp_fold): Remove {LE,LT,GE,GT_EXPR} from
a switch.
* typeck.c (cp_build_binary_op): Reject ordered comparison
of two null pointers.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/nullptr11.C: Remove invalid tests.
* g++.dg/cpp0x/nullptr46.C: Add dg-error.
* g++.dg/expr/ptr-comp4.C: New test.
libstdc++-v3/ChangeLog:
* testsuite/20_util/tuple/comparison_operators/overloaded.cc:
Add dg-error.
Maybe it would be useful to have also a g++.dg/cpp2a/ testcase with
nullptr <=> nullptr etc. (nullptr <=> 0, etc. what you test
in ptr-comp4.C after #include <compare>).
Sounds good.
+++ b/libstdc++-v3/testsuite/20_util/tuple/comparison_operators/overloaded.cc
@@ -49,3 +49,5 @@ TwistedLogic operator<(const Compares&, const Compares&) {
return {false}; }
auto a = std::make_tuple(nullptr, Compares{}, 2, 'U');
auto b = a == a;
auto c = a < a;
+
+// { dg-error "ordered comparison" "" { target *-*-* } 0 }
If we can't test for the specific problematic line, let's split this
testcase into separate well-formed and ill-formed tests.
Jason