https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104454
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |powerpc-ibm-aix7.2.0.0 CC| |dje at gcc dot gnu.org --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This may not be worth fixing, because AIX realpath is broken anyway #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/stat.h> int main() { rmdir("testdir/foo"); rmdir("testdir"); mkdir("testdir", S_IRWXU); mkdir("testdir/foo", S_IRWXU); puts(realpath("testdir/foo//..", 0)); } This prints $PWD/testdir/foo but should be $PWD/testdir or $PWD/testdir/ This means that even with this libstdc++ patch, the tests still fail: --- a/libstdc++-v3/src/c++17/fs_ops.cc +++ b/libstdc++-v3/src/c++17/fs_ops.cc @@ -182,6 +182,10 @@ fs::canonical(const path& p, error_code& ec) if (buf == nullptr) buf.reset(rp); result.assign(rp); + // AIX realpath("/foo/.", 0) returns "/foo/" (and POSIX allows that). + // For consistency across platforms we remove the trailing slash. + if (!result.has_filename() && result.has_relative_path()) + result = result.parent_path(); ec.clear(); return result; }