From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [IPv6:2620:20:4000:0:a9e:1ff:fe9b:1d1]) by sourceware.org (Postfix) with ESMTPS id 6795E3857B92; Thu, 23 Jun 2022 11:06:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6795E3857B92 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 2FF731161BE; Thu, 23 Jun 2022 07:06:56 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id Nm7ZTZ4jEHBz; Thu, 23 Jun 2022 07:06:56 -0400 (EDT) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id EC1251161BD; Thu, 23 Jun 2022 07:06:55 -0400 (EDT) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 25NB6hi4762227 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Jun 2022 08:06:43 -0300 From: Alexandre Oliva To: Jonathan Wakely Cc: gcc Patches , "libstdc++" Subject: Re: [PATCH] libstdc++: testsuite: skip fs space tests if not available Organization: Free thinker, does not speak for AdaCore References: Errors-To: aoliva@lxoliva.fsfla.org Date: Thu, 23 Jun 2022 08:06:42 -0300 In-Reply-To: (Jonathan Wakely's message of "Wed, 22 Jun 2022 10:46:20 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: 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: Thu, 23 Jun 2022 11:06:58 -0000 On Jun 22, 2022, Jonathan Wakely wrote: > This could be done once in testsuite_fs.h as well. Done. Erhm, I posted the new revision of the patch for this thread in the last_write_time thread, so I'm posting the last_write_time one here. This one also depends on dg infrastructure added in the NO_SYMLINKS patch. Regstrapped on x86_64-linux-gnu, also tested with a cross to aarch64-rtems6. Ok to install? libstdc++: testsuite: skip fs last_write_time tests if dummy The last_write_time functions are defined in ways that are useful, or that fail immediately, depending on various macros. When they fail immediately, the filesystem last_write_time.cc tests fail noisily, but the fail is entirely expected. Define NO_LAST_WRITE_TIME in the last_write_time.cc tests, according to the macros that select implementations of last_write_time, and use it through the new dg-require-target-fs-lwt to skip tests that are expected to fail. for libstdc++-v3/ChangeLog * testsuite/util/testsuite_fs.h (NO_LAST_WRITE_TIME): Define when appropriate. * testsuite/lib/libstdc++.exp (check_v3_target_fs_last_write_time): New. * testsuite/lib/dg-options.exp (dg-require-target-fs-lwt): New. * testsuite/27_io/filesystem/operations/last_write_time.cc: Skip the test if the features are unavailable. * testsuite/experimental/filesystem/operations/last_write_time.cc: Likewise. --- .../27_io/filesystem/operations/last_write_time.cc | 1 + .../filesystem/operations/last_write_time.cc | 1 + libstdc++-v3/testsuite/lib/dg-options.exp | 9 +++++++++ libstdc++-v3/testsuite/lib/libstdc++.exp | 8 ++++++++ libstdc++-v3/testsuite/util/testsuite_fs.h | 5 +++++ 5 files changed, 24 insertions(+) diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc index 7d6468a512424..f6460fb83d70d 100644 --- a/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc +++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc @@ -17,6 +17,7 @@ // { dg-do run { target c++17 } } // { dg-require-filesystem-ts "" } +// { dg-require-target-fs-lwt "" } // 15.25 Permissions [fs.op.last_write_time] diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc index 38fafc392ca9e..a0bf01ea935c5 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc @@ -18,6 +18,7 @@ // { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" } // { dg-do run { target c++11 } } // { dg-require-filesystem-ts "" } +// { dg-require-target-fs-lwt "" } // 15.25 Permissions [fs.op.last_write_time] diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp index 81bb8f448bd44..b61c4c0cb8fcd 100644 --- a/libstdc++-v3/testsuite/lib/dg-options.exp +++ b/libstdc++-v3/testsuite/lib/dg-options.exp @@ -259,6 +259,15 @@ proc dg-require-target-fs-space { args } { return } +proc dg-require-target-fs-lwt { args } { + if { ![ check_v3_target_fs_last_write_time ] } { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] + return + } + return +} + proc add_options_for_no_pch { flags } { # This forces any generated and possibly included PCH to be invalid. return "-D__GLIBCXX__=99999999" diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 22fdde8d66374..ca515c6f3548b 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -1286,6 +1286,14 @@ proc check_v3_target_fs_space { } { return [v3_check_preprocessor_condition fs_space $cond $inc] } +# Return 1 if the libstdc++ filesystem implementation of +# last_write_time is not an always-failing dummy. +proc check_v3_target_fs_last_write_time { } { + set inc "#include " + set cond "!defined NO_LAST_WRITE_TIME" + return [v3_check_preprocessor_condition fs_last_write_time $cond $inc] +} + # Return 1 if the "cxx11" ABI is in use using the current flags, 0 otherwise. # Any flags provided by RUNTESTFLAGS or a target board will be used here. # Flags added in the test by dg-options or dg-add-options will not be used. diff --git a/libstdc++-v3/testsuite/util/testsuite_fs.h b/libstdc++-v3/testsuite/util/testsuite_fs.h index 89042e5534139..037d9ffc0f429 100644 --- a/libstdc++-v3/testsuite/util/testsuite_fs.h +++ b/libstdc++-v3/testsuite/util/testsuite_fs.h @@ -52,6 +52,11 @@ namespace test_fs = std::experimental::filesystem; #define NO_SPACE #endif +#if !(_GLIBCXX_HAVE_SYS_STAT_H \ + && (_GLIBCXX_USE_UTIMENSAT || _GLIBCXX_USE_UTIME)) +#define NO_LAST_WRITE_TIME 1 +#endif + namespace __gnu_test { #define PATH_CHK(p1, p2, fn) \ -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer Disinformation flourishes because many people care deeply about injustice but very few check the facts. Ask me about