From patchwork Fri Sep 30 16:45:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Arsen_Arsenovi=C4=87?= X-Patchwork-Id: 1609 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp583001wrs; Fri, 30 Sep 2022 09:57:59 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4Y5DS6P1gWPC7TftVDYuAtEEh3llY5QKHPJhVMuSXW5uzB0qqNEduzC2q81zQxuAvPoh2S X-Received: by 2002:a17:907:a051:b0:77a:e136:6ad2 with SMTP id gz17-20020a170907a05100b0077ae1366ad2mr7052609ejc.764.1664557079704; Fri, 30 Sep 2022 09:57:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664557079; cv=none; d=google.com; s=arc-20160816; b=MsXSfGMYvc8Ptx5l8BQ9b/hpCpXXTpgJw8oU3gXkxBWxtIXo3QukckBnPDOVV0mawg kES7qXmxGio8zih6K3dyMJFB2sryw2wtUsiRdBTrCw70SAaJrnkjYIXPCedERV04+ClY d7cn9w5nsGGbwb97fGn/QYRe+08bxUgOorX6+yl0KVzFKW9IQ4FXmOhVt35l6PuxfEGa tGkcEPmdRHOm+6ZuO9BD2fyKBjNBrpB83DsOk9D+LXvT2schkFmWhtPUuCjfb3Om/Q3z ofExR4ZBM7H37en2x1EqvhNd43uxm5903WEnwbWPguJQwTgfpxtFgkAn1+if6aPGTp71 koLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=drRLhkuEzwZmjesLQ7CrWGabQAx4ZtHwLo0tifPonUQ=; b=x6b/WLaeqaBlTKdGdlJbTwklMFcrUJjGl9IhX0Z2bhLqr1pIWQQ29JL0fz+1vEL4nv xfW6Nssc/0NUiyM+dmeJTBkeKnQxAvcr1KkruDgjPML8pEXB9CBHuJzA09/ChhcpZf5p 4U1ospbfKhrKyc1ndWV6n73wrEuM1w95mXnVrh958KljL9tCk8N2jQmILS5HchL/q8B8 lWnavycI+O0dpjw6v+OsWfliG3yeqHuJvaNLYhHfqjdmyFl9yfc7lKYhXEWRQFMgq/jg NYWoJw8aomqD1JKKV6HBXDmKfJjApxUCaAU3g3isShhW/M7yCs0uhInWcVHb5Em4iDpz 2akQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="e0/vZ0ra"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id rv1-20020a17090710c100b00783112d1790si1902846ejb.255.2022.09.30.09.57.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 09:57:59 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="e0/vZ0ra"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7F9783895FE1 for ; Fri, 30 Sep 2022 16:51:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7F9783895FE1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664556677; bh=drRLhkuEzwZmjesLQ7CrWGabQAx4ZtHwLo0tifPonUQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=e0/vZ0ra1EKSMYy8kGVUDMAanhOLIzaNnvdj04ZoJJExJUyEjhLXpyutb9d9NfrU5 N6ugaJkj82iSdg4JxQWElsTDP0Js7RVoERPAbR4uhJ2XQv7Y6R3bvYgL3o5Bcfuqjp r6u/EybCKeEVN+fDkbTwe1LATrB3C1p6Uydg7Gt4= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout-p-103.mailbox.org (mout-p-103.mailbox.org [80.241.56.161]) by sourceware.org (Postfix) with ESMTPS id A8E62385E02B; Fri, 30 Sep 2022 16:46:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A8E62385E02B Received: from smtp1.mailbox.org (smtp1.mailbox.org [10.196.197.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-103.mailbox.org (Postfix) with ESMTPS id 4MfGMq4kmLz9sW3; Fri, 30 Sep 2022 18:46:31 +0200 (CEST) To: gcc-patches@gcc.gnu.org Subject: [PATCH 07/10] libstdc++: Make some tests work on freestanding [PR103626] Date: Fri, 30 Sep 2022 18:45:53 +0200 Message-Id: <20220930164556.1198044-8-arsen@aarsen.me> In-Reply-To: <20220930164556.1198044-1-arsen@aarsen.me> References: <20220930164556.1198044-1-arsen@aarsen.me> MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_INFOUSMEBIZ, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, URI_HEX autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: =?utf-8?q?Arsen_Arsenovi=C4=87_via_Gcc-patches?= From: =?utf-8?q?Arsen_Arsenovi=C4=87?= Reply-To: =?utf-8?q?Arsen_Arsenovi=C4=87?= Cc: Jonathan Wakely , libstdc++@gcc.gnu.org Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1745414604267224468?= X-GMAIL-MSGID: =?utf-8?q?1745414604267224468?= PR libstdc++/103626 - _GLIBCXX_HOSTED should respect -ffreestanding Co-authored-by: Jonathan Wakely libstdc++-v3/ChangeLog: PR libstdc++/103626 * testsuite/17_intro/headers/c++1998/stdc++.cc [!__STDC_HOSTED__]: Do not include C headers that aren't valid for freestanding. * testsuite/17_intro/tag_type_explicit_ctor.cc [!__STDC_HOSTED__]: Do not test tag types that aren't defined for freestanding. * testsuite/18_support/headers/cstdlib/functions_std.cc: Do not check for std::getenv and std::system for freestanding. * testsuite/17_intro/using_namespace_std_exp_neg.cc [!__STDC_HOSTED__]: Do not test hosted parts of the standard library. * testsuite/17_intro/using_namespace_std_tr1_neg.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/allocator_traits/members/rebind_alloc.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc [!HOSTED]: Likewise. * testsuite/20_util/headers/bitset/synopsis.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/pointer_traits/requirements/typedefs.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/tuple/cons/deduction.cc [!__STDC_HOSTED__]: Likewise. * testsuite/25_algorithms/move/93872.cc [!__STDC_HOSTED__]: Likewise. * testsuite/std/ranges/adaptors/100577.cc [!__STDC_HOSTED__]: Likewise. Signed-off-by: Arsen Arsenović --- .../17_intro/headers/c++1998/stdc++.cc | 2 + .../17_intro/tag_type_explicit_ctor.cc | 32 +++++++---- .../17_intro/using_namespace_std_exp_neg.cc | 53 ++++++++++--------- .../17_intro/using_namespace_std_tr1_neg.cc | 53 ++++++++++--------- .../headers/cstdlib/functions_std.cc | 2 + .../allocator_traits/members/rebind_alloc.cc | 2 + .../requirements/explicit_instantiation.cc | 2 + .../20_util/headers/bitset/synopsis.cc | 2 + .../requirements/typedefs_neg.cc | 4 +- .../pointer_traits/requirements/typedefs.cc | 2 + .../testsuite/20_util/tuple/cons/deduction.cc | 2 + .../testsuite/25_algorithms/move/93872.cc | 1 + .../testsuite/std/ranges/adaptors/100577.cc | 11 +++- 13 files changed, 104 insertions(+), 64 deletions(-) diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc index 4776c18e1ed..e362dfee329 100644 --- a/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc +++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc @@ -24,6 +24,7 @@ #include +#if __STDC_HOSTED__ // "C" compatibility headers #include #include @@ -47,3 +48,4 @@ #ifdef _GLIBCXX_HAVE_WCTYPE_H #include #endif +#endif diff --git a/libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc b/libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc index 262fc9a04d1..410142d3974 100644 --- a/libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc +++ b/libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc @@ -20,40 +20,50 @@ #include #include #include -#include + +#if __STDC_HOSTED__ +# include +#endif void f1(std::nothrow_t); void f2(std::piecewise_construct_t); void f3(std::allocator_arg_t); +#if __STDC_HOSTED__ void f4(std::defer_lock_t); void f5(std::try_to_lock_t); void f6(std::adopt_lock_t); - +#endif int main() { std::nothrow_t v1; std::piecewise_construct_t v2; std::allocator_arg_t v3; +#if __STDC_HOSTED__ std::defer_lock_t v4; std::try_to_lock_t v5; std::try_to_lock_t v6; +#endif std::nothrow_t v7 = {}; // { dg-error "explicit" } std::piecewise_construct_t v8 = {}; // { dg-error "explicit" } std::allocator_arg_t v9 = {}; // { dg-error "explicit" } - std::defer_lock_t v10 = {}; // { dg-error "explicit" } - std::try_to_lock_t v11 = {}; // { dg-error "explicit" } - std::try_to_lock_t v12 = {}; // { dg-error "explicit" } +#if __STDC_HOSTED__ + std::defer_lock_t v10 = {}; // { dg-error "explicit" "" { target hosted } } + std::try_to_lock_t v11 = {}; // { dg-error "explicit" "" { target hosted } } + std::try_to_lock_t v12 = {}; // { dg-error "explicit" "" { target hosted } } +#endif f1(std::nothrow_t{}); f2(std::piecewise_construct_t{}); f3(std::allocator_arg_t{}); - f4(std::defer_lock_t{}); - f5(std::try_to_lock_t{}); - f6(std::adopt_lock_t{}); f1({}); // { dg-error "explicit" } f2({}); // { dg-error "explicit" } f3({}); // { dg-error "explicit" } - f4({}); // { dg-error "explicit" } - f5({}); // { dg-error "explicit" } - f6({}); // { dg-error "explicit" } +#if __STDC_HOSTED__ + f4(std::defer_lock_t{}); + f5(std::try_to_lock_t{}); + f6(std::adopt_lock_t{}); + f4({}); // { dg-error "explicit" "" { target hosted } } + f5({}); // { dg-error "explicit" "" { target hosted } } + f6({}); // { dg-error "explicit" "" { target hosted } } +#endif } diff --git a/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc b/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc index cdec24e9f7f..9fadafdbccf 100644 --- a/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc +++ b/libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc @@ -20,42 +20,45 @@ #include #include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include #include #include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include #include -#include -#include + +#if __STDC_HOSTED__ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif namespace gnu { diff --git a/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc b/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc index 31c2589da4f..4d08cc5bc91 100644 --- a/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc +++ b/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc @@ -23,42 +23,45 @@ #include #include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include #include #include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include #include -#include -#include + +#if __STDC_HOSTED__ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif namespace gnu { diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc b/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc index e7738899ea0..af1ed6a8652 100644 --- a/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc +++ b/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc @@ -25,6 +25,8 @@ namespace gnu using std::atexit; using std::exit; +#if __STDC_HOSTED__ using std::getenv; using std::system; +#endif } diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc index 32caf53c988..ca2a8044665 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc @@ -24,6 +24,7 @@ using std::is_same; template using Rebind = typename std::allocator_traits::template rebind_alloc; +#if __STDC_HOSTED__ template struct HasRebind { using value_type = T; @@ -33,6 +34,7 @@ template static_assert(is_same, long>, std::allocator>::value, "nested alias template is used"); +#endif template struct NoRebind0 { diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc index 42a2091cf47..8f7c191e94a 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc @@ -36,6 +36,8 @@ template namespace std { +#if __STDC_HOSTED__ template struct allocator_traits>; +#endif template struct allocator_traits>; } diff --git a/libstdc++-v3/testsuite/20_util/headers/bitset/synopsis.cc b/libstdc++-v3/testsuite/20_util/headers/bitset/synopsis.cc index ed5604b6b22..094f0f268b3 100644 --- a/libstdc++-v3/testsuite/20_util/headers/bitset/synopsis.cc +++ b/libstdc++-v3/testsuite/20_util/headers/bitset/synopsis.cc @@ -49,6 +49,7 @@ namespace std { CONSTEXPR bitset operator^(const bitset&, const bitset&) NOTHROW; +#if __STDC_HOSTED__ template basic_istream& operator>>(basic_istream& is, bitset& x); @@ -56,4 +57,5 @@ namespace std { template basic_ostream& operator<<(basic_ostream& os, const bitset& x); +#endif } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc index 9eebbc400b0..ff98cc42ef7 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc @@ -20,9 +20,9 @@ // . #include -#include enum test_enum { first_selection }; +struct pod_class { }; void test01() { @@ -31,7 +31,7 @@ void test01() // Negative tests. typedef make_unsigned::type test1_type; - typedef make_unsigned<__gnu_test::pod_uint>::type test2_type; + typedef make_unsigned::type test2_type; typedef make_unsigned::type test3_type; diff --git a/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc index 93c8a369c25..a88372c4d3a 100644 --- a/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc @@ -37,8 +37,10 @@ int main() { test01(); test01(); +#if __STDC_HOSTED__ test01>(); test01>(); +#endif test01>(); test01>(); } diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc index 8b9393dd334..c4b5a5c1eaf 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc @@ -145,6 +145,7 @@ test04() void test05() { +#if __STDC_HOSTED__ std::allocator a; std::tuple x{std::allocator_arg, a, 1}; check_type>(x); @@ -161,4 +162,5 @@ test05() check_type(x5); std::tuple x6{std::allocator_arg, a, std::move(x)}; check_type(x6); +#endif } diff --git a/libstdc++-v3/testsuite/25_algorithms/move/93872.cc b/libstdc++-v3/testsuite/25_algorithms/move/93872.cc index 4b0c8105171..8496a221063 100644 --- a/libstdc++-v3/testsuite/25_algorithms/move/93872.cc +++ b/libstdc++-v3/testsuite/25_algorithms/move/93872.cc @@ -18,6 +18,7 @@ // { dg-options "-std=gnu++2a" } // { dg-do compile { target c++2a } } +#include #include #include diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc index 97401dae39c..c900553743b 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc @@ -22,6 +22,9 @@ #include #include +#if __STDC_HOSTED__ +#include +#endif namespace ranges = std::ranges; namespace views = std::ranges::views; @@ -38,9 +41,11 @@ test01() static_assert(__adaptor_has_simple_extra_args); static_assert(__adaptor_has_simple_extra_args); static_assert(__adaptor_has_simple_extra_args); - static_assert(__adaptor_has_simple_extra_args); static_assert(__adaptor_has_simple_extra_args); +#if __STDC_HOSTED__ + static_assert(__adaptor_has_simple_extra_args); static_assert(!__adaptor_has_simple_extra_args); +#endif using views::__adaptor::__closure_has_simple_call_op; __closure_has_simple_call_op auto a00 = views::all; @@ -60,6 +65,7 @@ test01() __closure_has_simple_call_op auto b = (a00 | a01) | (a02 | a03) | (a04 | a05 | a06) | (a07 | a08 | a09 | a10) | a11; +#if __STDC_HOSTED__ // Verify views::lazy_split(non_view_range) is an exception. extern std::string s; auto a12 = views::lazy_split(s); @@ -72,6 +78,7 @@ test01() static_assert(!__closure_has_simple_call_op); static_assert(!__closure_has_simple_call_op); static_assert(!__closure_has_simple_call_op); +#endif } void @@ -129,6 +136,7 @@ test03() void test04() { +#if __STDC_HOSTED__ // Non-trivially-copyable extra arguments make a closure not simple. using F = std::function; static_assert(!std::is_trivially_copyable_v); @@ -137,6 +145,7 @@ test04() static_assert(!__closure_has_simple_call_op()))>); static_assert(!__closure_has_simple_call_op()))>); static_assert(!__closure_has_simple_call_op()))>); +#endif } // { dg-prune-output "in requirements" }