diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -1026,12 +1026,12 @@ if (__p.has_root_directory()) { path __root_name_str = root_name(); __pn_ = __root_name_str.native(); - __pn_ += __p.__pn_.substr(__p_root_name_size); + __pn_ += __string_view(__p.__pn_).substr(__p_root_name_size); return *this; } if (has_filename() || (!has_root_directory() && is_absolute())) __pn_ += preferred_separator; - __pn_ += __p.__pn_.substr(__p_root_name_size); + __pn_ += __string_view(__p.__pn_).substr(__p_root_name_size); return *this; } template diff --git a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp --- a/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp +++ b/libcxx/test/std/input.output/filesystems/class.path/path.member/path.append.pass.cpp @@ -175,6 +175,15 @@ } assert(PathEq(LHS, E)); } + { + path LHS(L); PathReserve(LHS, ReserveSize); + path RHS(R); + { + DisableAllocationGuard g; + LHS /= RHS; + } + assert(PathEq(LHS, E)); + } // input iterator - For non-native char types, appends needs to copy the // iterator range into a contiguous block of memory before it can perform the // code_cvt conversions.