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

Reply via email to