From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by sourceware.org (Postfix) with ESMTP id F190C39B8CA5 for ; Wed, 3 Feb 2021 15:50:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F190C39B8CA5 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-296-fxkqwS6bMs2rmXp77CwITw-1; Wed, 03 Feb 2021 10:50:47 -0500 X-MC-Unique: fxkqwS6bMs2rmXp77CwITw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 48785801961; Wed, 3 Feb 2021 15:50:46 +0000 (UTC) Received: from localhost (unknown [10.33.37.24]) by smtp.corp.redhat.com (Postfix) with ESMTP id A9F825D9E3; Wed, 3 Feb 2021 15:50:45 +0000 (UTC) Date: Wed, 3 Feb 2021 15:50:44 +0000 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Cc: Claudiu Zissulescu , Shahab Vahedi Subject: [committed] libstdc++: Fix incorrect test for std::error_code comparisons Message-ID: <20210203155044.GA152111@redhat.com> MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="TB36FDmn/VVEgNH/" Content-Disposition: inline X-Spam-Status: No, score=-14.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Feb 2021 15:50:53 -0000 --TB36FDmn/VVEgNH/ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline The tests for std::error_code comparisons assumed that a default constructed object uses std::generic_category(). That's true for a default constructed std::error_condition, but not std::error_code. Fix the three-way comparisons to correctly depend on the result of comparing the categories, and add another test for comparing two objects with the same category and different values. libstdc++-v3/ChangeLog: * testsuite/19_diagnostics/error_code/operators/not_equal.cc: Add comparison with same category and different values. * testsuite/19_diagnostics/error_code/operators/less.cc: Likewise. Fix comparison involving different categories. * testsuite/19_diagnostics/error_code/operators/three_way.cc: Likewise. * testsuite/19_diagnostics/error_condition/operators/less.cc: Add comment. * testsuite/19_diagnostics/error_condition/operators/three_way.cc: Likewise. Tested x86_64-linux. Committed to trunk. --TB36FDmn/VVEgNH/ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="patch.txt" commit a6f08be383f846a0474ea8d1da9222b802c36c7c Author: Jonathan Wakely Date: Wed Feb 3 15:49:36 2021 libstdc++: Fix incorrect test for std::error_code comparisons The tests for std::error_code comparisons assumed that a default constructed object uses std::generic_category(). That's true for a default constructed std::error_condition, but not std::error_code. Fix the three-way comparisons to correctly depend on the result of comparing the categories, and add another test for comparing two objects with the same category and different values. libstdc++-v3/ChangeLog: * testsuite/19_diagnostics/error_code/operators/not_equal.cc: Add comparison with same category and different values. * testsuite/19_diagnostics/error_code/operators/less.cc: Likewise. Fix comparison involving different categories. * testsuite/19_diagnostics/error_code/operators/three_way.cc: Likewise. * testsuite/19_diagnostics/error_condition/operators/less.cc: Add comment. * testsuite/19_diagnostics/error_condition/operators/three_way.cc: Likewise. diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc index 655515c4988..abb754136ea 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc @@ -29,10 +29,13 @@ int main() VERIFY( !(e1 < e1) ); VERIFY( !(e2 < e2) ); - VERIFY( (e1 < e2) == (e1.value() < e2.value()) ); + VERIFY( (e1 < e2) == (e1.category() < e2.category()) ); const __gnu_test::test_category cat; std::error_code e3(e2.value(), cat); VERIFY( !(e3 < e3) ); VERIFY( (e2 < e3) == (e2.category() < e3.category()) ); + + std::error_code e4(std::make_error_code(std::errc::invalid_argument)); + VERIFY( (e4 < e2) == (e4.value() < e2.value()) ); } diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc index a8dfa505dc2..543ffceb832 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc @@ -34,5 +34,6 @@ int main() std::error_code e3(e2.value(), cat); VERIFY( e2 != e3 ); - return 0; + std::error_code e4(std::make_error_code(std::errc::invalid_argument)); + VERIFY( e4 != e2 ); } diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc index 448f51d1d73..50c54bea94f 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc @@ -33,7 +33,7 @@ test01() VERIFY( std::is_neq(e1 <=> e2) ); VERIFY( std::is_lt(e1 <=> e2) || std::is_gt(e1 <=> e2) ); - VERIFY( (e1 <=> e2) == (e1.value() <=> e2.value()) ); + VERIFY( (e1 <=> e2) == (e1.category() <=> e2.category()) ); VERIFY( e1 == e1 ); VERIFY( !(e1 == e2) ); @@ -52,6 +52,12 @@ test01() VERIFY( !(e3 < e3) ); VERIFY( (e2 < e3) == (e2.category() < e3.category()) ); + + std::error_code e4(std::make_error_code(std::errc::invalid_argument)); + + VERIFY( std::is_neq(e4 <=> e2) ); + VERIFY( std::is_lt(e4 <=> e2) || std::is_gt(e4 <=> e2) ); + VERIFY( (e4 <=> e2) == (e4.value() <=> e2.value()) ); } int main() diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc index 96f8b6868af..8a6b71fdc35 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc @@ -29,6 +29,7 @@ int main() VERIFY( !(e1 < e1) ); VERIFY( !(e2 < e2) ); + // e1.category() == e2.category(), so comparison depends on values: VERIFY( (e1 < e2) == (e1.value() < e2.value()) ); const __gnu_test::test_category cat; diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc index 189889706ce..e26afe57366 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc @@ -33,6 +33,7 @@ test01() VERIFY( std::is_neq(e1 <=> e2) ); VERIFY( std::is_lt(e1 <=> e2) || std::is_gt(e1 <=> e2) ); + // e1.category() == e2.category(), so comparison depends on values: VERIFY( (e1 <=> e2) == (e1.value() <=> e2.value()) ); VERIFY( e1 == e1 ); --TB36FDmn/VVEgNH/--