From f7a148304a71f3d3ad6845b7966fdc3af88c9e45 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 1 Jul 2022 11:40:29 +0100 Subject: libstdc++: Add nodiscard attribute to filesystem operations Some of these are not truly "pure" because they access the file system, e.g. exists and file_size, but they do not modify anything and are only useful for the return value. If you really want to use one of those functions just to check whether an error is reported (either via an exception or an error_code& argument) you can still do so, but you need to cast the discarded result to void. Several tests need such a change, because they were indeed only calling the functions to check for expected errors. libstdc++-v3/ChangeLog: * include/bits/fs_ops.h: Add nodiscard to all pure functions. * include/experimental/bits/fs_ops.h: Likewise. * testsuite/27_io/filesystem/operations/all.cc: Do not discard results of absolute and canonical. * testsuite/27_io/filesystem/operations/absolute.cc: Cast discarded result to void. * testsuite/27_io/filesystem/operations/canonical.cc: Likewise. * testsuite/27_io/filesystem/operations/exists.cc: Likewise. * testsuite/27_io/filesystem/operations/is_empty.cc: Likewise. * testsuite/27_io/filesystem/operations/read_symlink.cc: Likewise. * testsuite/27_io/filesystem/operations/status.cc: Likewise. * testsuite/27_io/filesystem/operations/symlink_status.cc: Likewise. * testsuite/27_io/filesystem/operations/temp_directory_path.cc: Likewise. * testsuite/experimental/filesystem/operations/canonical.cc: Likewise. * testsuite/experimental/filesystem/operations/exists.cc: Likewise. * testsuite/experimental/filesystem/operations/is_empty.cc: Likewise. * testsuite/experimental/filesystem/operations/read_symlink.cc: Likewise. * testsuite/experimental/filesystem/operations/temp_directory_path.cc: Likewise. --- .../testsuite/experimental/filesystem/operations/canonical.cc | 6 +++--- libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc | 2 +- .../testsuite/experimental/filesystem/operations/is_empty.cc | 4 ++-- .../testsuite/experimental/filesystem/operations/read_symlink.cc | 2 +- .../experimental/filesystem/operations/temp_directory_path.cc | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) (limited to 'libstdc++-v3/testsuite/experimental/filesystem') diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc index aef6725..92772db 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc @@ -30,11 +30,11 @@ test01() { std::error_code ec; auto p = __gnu_test::nonexistent_path(); - canonical( p, ec ); + (void) canonical( p, ec ); VERIFY( ec ); p = fs::current_path(); - canonical( p, ec ); + (void) canonical( p, ec ); VERIFY( !ec ); const auto root = fs::absolute("/"); @@ -67,7 +67,7 @@ test02() fs::path p = "rel", base = __gnu_test::nonexistent_path(); fs::path e1, e2; try { - canonical(p, base); + (void) canonical(p, base); } catch (const fs::filesystem_error& e) { e1 = e.path1(); e2 = e.path2(); diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc index 5c274d0..271aff9 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc @@ -89,7 +89,7 @@ test04() ec.clear(); try { - exists(unr); + (void) exists(unr); } catch(const std::experimental::filesystem::filesystem_error& ex) { diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc index 7472363..da21c8d 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc @@ -41,7 +41,7 @@ test01() VERIFY( !result ); try { - fs::is_empty(p); + (void) fs::is_empty(p); } catch (const fs::filesystem_error& e) { ec2 = e.code(); } @@ -52,7 +52,7 @@ test01() VERIFY( !result ); try { - fs::is_empty(p/"f"); + (void) fs::is_empty(p/"f"); } catch (const fs::filesystem_error& e) { ec2 = e.code(); } diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc index d0a90976..a29ceeb 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc @@ -32,7 +32,7 @@ test01() auto p = __gnu_test::nonexistent_path(); std::error_code ec; - read_symlink(p, ec); + (void) read_symlink(p, ec); VERIFY( ec ); fs::path tgt = "."; diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc index 1772f97..d985f11 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc @@ -118,7 +118,7 @@ test03() std::error_code ec2; try { - fs::temp_directory_path(); + (void) fs::temp_directory_path(); } catch (const fs::filesystem_error& e) { ec2 = e.code(); } @@ -143,7 +143,7 @@ test04() std::error_code ec2; std::string failed_path; try { - fs::temp_directory_path(); + (void) fs::temp_directory_path(); } catch (const fs::filesystem_error& e) { ec2 = e.code(); // On Windows the returned path will be in preferred form, i.e. using L'\\' -- cgit v1.1