From 174f1d264274d3f77133713a3853fc016ba527b4 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 10 Jan 2019 15:39:28 +0000 Subject: [PATCH] Fix filesystem::last_write_time failure with 32-bit time_t * testsuite/27_io/filesystem/operations/last_write_time.cc: Fix test failures on targets with 32-bit time_t. From-SVN: r267811 --- libstdc++-v3/ChangeLog | 3 +++ .../27_io/filesystem/operations/last_write_time.cc | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 00ebddd..edbc2ec 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2019-01-10 Jonathan Wakely + * testsuite/27_io/filesystem/operations/last_write_time.cc: Fix + test failures on targets with 32-bit time_t. + * include/bits/erase_if.h: Define __cpp_lib_erase_if. * include/std/deque: Likewise. * include/std/forward_list: Likewise. 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 7a693a1..3f31375 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 @@ -22,6 +22,7 @@ // 15.25 Permissions [fs.op.last_write_time] #include +#include #include #include @@ -141,14 +142,27 @@ test02() VERIFY( !ec ); VERIFY( approx_equal(last_write_time(f.path), time) ); + if (std::numeric_limits::max() + < std::numeric_limits::max()) + return; // file clock's epoch is out of range for 32-bit time_t + ec = bad_ec; + // The file clock's epoch: time = time_type(); last_write_time(f.path, time, ec); VERIFY( !ec ); VERIFY( approx_equal(last_write_time(f.path), time) ); ec = bad_ec; - time -= std::chrono::milliseconds(1000 * 60 * 10 + 15); + // A time after the epoch + time += std::chrono::milliseconds(1000 * 60 * 10 + 15); + last_write_time(f.path, time, ec); + VERIFY( !ec ); + VERIFY( approx_equal(last_write_time(f.path), time) ); + + ec = bad_ec; + // A time before than the epoch + time -= std::chrono::milliseconds(1000 * 60 * 20 + 15); last_write_time(f.path, time, ec); VERIFY( !ec ); VERIFY( approx_equal(last_write_time(f.path), time) ); -- 2.7.4