diff --git a/libcxx/src/filesystem/operations.cpp b/libcxx/src/filesystem/operations.cpp --- a/libcxx/src/filesystem/operations.cpp +++ b/libcxx/src/filesystem/operations.cpp @@ -1022,7 +1022,10 @@ } else if (not is_directory(parent_st)) return err.report(errc::not_a_directory); } - return __create_directory(p, ec); + bool ret = __create_directory(p, &m_ec); + if (m_ec) + return err.report(m_ec); + return ret; } bool __create_directory(const path& p, error_code* ec) { diff --git a/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.create_directories/create_directories.pass.cpp b/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.create_directories/create_directories.pass.cpp --- a/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.create_directories/create_directories.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.create_directories/create_directories.pass.cpp @@ -138,6 +138,18 @@ TEST_CHECK(!exists(dir)); } +TEST_CASE(dest_is_empty_path) +{ + std::error_code ec = GetTestEC(); + TEST_CHECK(fs::create_directories(fs::path{}, ec) == false); + TEST_CHECK(ec); + TEST_CHECK(ErrorIs(ec, std::errc::no_such_file_or_directory)); + ExceptionChecker Checker(path{}, std::errc::no_such_file_or_directory, + "create_directories"); + TEST_CHECK_THROW_RESULT(filesystem_error, Checker, + fs::create_directories(path{})); +} + #ifdef _WIN32 TEST_CASE(nonexistent_root) {