https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91947

            Bug ID: 91947
           Summary: std::filesystem::file_size will return wrong value on
                    32bit platforms with large files support
           Product: gcc
           Version: 8.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fregloin at gmail dot com
  Target Milestone: ---

std::filesystem::file_size will return wrong value on 32bit platforms with
large files support

/trunk/libstdc++-v3/src/filesystem/ops.cc
/trunk/libstdc++-v3/src/filesystem/std-ops.cc (the same problem)

struct S field `size` of type `size_t`.

When it casted from uintmax_t to size_t on 32bit platform, the result of this
function will be wrong.

fs::file_size(const path& p, error_code& ec) noexcept
{
  struct S
  {
    S(const stat_type& st) : type(make_file_type(st)), size(st.st_size) { }
  }
    S() : type(file_type::not_found) { }
    file_type type;
    size_t size;
...
};

stat.off_t type is off64_t when large file support is enabled.

Reply via email to