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);

Reply via email to