This test's logic was wrong for the case where the nofollow option is supported and the operation succeeds.
PR libstdc++/82706 * testsuite/27_io/filesystem/operations/permissions.cc: Fix test. Tested x86_64-linux, committed to trunk.
commit 4e94cea9af0581c319aa2f5092c63d668888843d Author: Jonathan Wakely <jwak...@redhat.com> Date: Wed Oct 25 01:25:46 2017 +0100 PR libstdc++/82706 fix test for case where operations succeed PR libstdc++/82706 * testsuite/27_io/filesystem/operations/permissions.cc: Fix test. diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc index 97b7a7874f7..e190e886230 100644 --- a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc +++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc @@ -86,9 +86,10 @@ test03() create_symlink(f.path, p); std::error_code ec = make_error_code(std::errc::no_such_file_or_directory); - std::error_code ec2 = make_error_code(std::errc::invalid_argument); permissions(p, perms::owner_all, perm_options::replace|perm_options::nofollow, ec); + bool caught = false; + std::error_code ec2; try { permissions(p, perms::owner_all, @@ -96,11 +97,18 @@ test03() } catch (const std::filesystem::filesystem_error& ex) { + caught = true; ec2 = ex.code(); VERIFY( ex.path1() == p ); } // Both calls should succeed, or both should fail with same error: - VERIFY( ec == ec2 ); + if (ec) + { + VERIFY( caught ); + VERIFY( ec == ec2 ); + } + else + VERIFY( !caught ); remove(p); } @@ -114,9 +122,9 @@ test04() create_symlink(__gnu_test::nonexistent_path(), p); std::error_code ec = make_error_code(std::errc::no_such_file_or_directory); - std::error_code ec2 = make_error_code(std::errc::invalid_argument); permissions(p, perms::owner_all, ec); VERIFY( ec ); + std::error_code ec2; try { permissions(p, perms::owner_all);