gcc/libstdc++-v3
Jonathan Wakely 73d968d945 Fix bugs in filesystem::path::lexically_normal()
Using path::_List::erase(const_iterator) to remove a non-final component
in path::lexically_normal() is a bug, because it leaves the following
component with an incorrect _M_pos value.

Instead of providing erase members that allow removing components from
the middle, replace them with pop_back() and
_M_erase_from(const_iterator) which only allow removing elements at the
end. Most uses of erase are unaffected, because they only remove
elements from the end anyway. The one use of erasure from the middle in
lexically_normal() is replaced by calls to pop_back() and/or clearing
the last component to leave it as an empty final filename.

Also replace the "???" comment in lexically_normal() to document when
that branch is taken.

	* include/bits/fs_path.h (path::_List::erase): Replace both overloads
	with ...
	(path::pop_back(), path::_M_erase_from(const_iterator)): New member
	functions that will only erase elements at the end.
	* src/filesystem/std-path.cc (path::_List::_Impl::pop_back()): Define.
	(path::_List::_Impl::_M_erase_from(const_iterator)): Define.
	(path::_List::operator=(const _List&)): Use _M_erase_from(p) instead
	of erase(p, end()).
	(path::_List::pop_back()): Define.
	(path::_List::_M_erase_from(const_iterator)): Define.
	(path::operator/=(const path&)): Use pop_back to remove last component
	and _M_erase_from to remove multiple components.
	(path::_M_append(basic_string_view<value_type>)): Likewise.
	(path::operator+=(const path&)): Likewise.
	(path::_M_concat(basic_string_view<value_type>)): Likewise.
	(path::remove_filename()): Likewise.
	(path::lexically_normal()): Use _List::_Impl iterators instead of
	path::iterator. Use pop_back to remove components from the end. Clear
	trailing filename, instead of using erase(const_iterator) to remove
	a non-final component.
	* testsuite/27_io/filesystem/path/generation/normal.cc: Test
	additional cases.
	* testsuite/27_io/filesystem/path/generation/normal2.cc: New test.

From-SVN: r267576
2019-01-04 14:03:59 +00:00
..
config PR libstdc++/88681 export missing symbols 2019-01-03 20:38:04 +00:00
doc Update copyright years. 2019-01-01 13:31:55 +01:00
include Fix bugs in filesystem::path::lexically_normal() 2019-01-04 14:03:59 +00:00
libsupc++ Update copyright years. 2019-01-01 13:31:55 +01:00
po Update copyright years. 2019-01-01 13:31:55 +01:00
python Update copyright years. 2019-01-01 13:31:55 +01:00
scripts Update copyright years. 2019-01-01 13:31:55 +01:00
src Fix bugs in filesystem::path::lexically_normal() 2019-01-04 14:03:59 +00:00
testsuite Fix bugs in filesystem::path::lexically_normal() 2019-01-04 14:03:59 +00:00
ChangeLog Fix bugs in filesystem::path::lexically_normal() 2019-01-04 14:03:59 +00:00
ChangeLog-1998
ChangeLog-1999
ChangeLog-2000
ChangeLog-2001
ChangeLog-2002
ChangeLog-2003
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-2016
ChangeLog-2017 Update copyright years. 2018-01-03 11:03:58 +01:00
ChangeLog-2018 Update copyright years. 2019-01-01 13:31:55 +01:00
Makefile.am Update copyright years. 2019-01-01 13:31:55 +01:00
Makefile.in Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
README
acinclude.m4 PR libstdc++/67843 set shared_ptr lock policy at build-time 2018-11-27 23:25:56 +00:00
aclocal.m4 Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
config.h.in PR libstdc++/67843 set shared_ptr lock policy at build-time 2018-11-27 23:25:56 +00:00
configure PR libstdc++/67843 set shared_ptr lock policy at build-time 2018-11-27 23:25:56 +00:00
configure.ac PR libstdc++/67843 set shared_ptr lock policy at build-time 2018-11-27 23:25:56 +00:00
configure.host Don't force visibility to hidden for Darwin > 8. 2018-08-25 09:02:28 +00:00
crossconfig.m4 Define _GLIBCXX_USE_DEV_RANDOM as replacement for _GLIBCXX_USE_RANDOM_TR1 2018-10-16 15:49:29 +01:00
fragment.am PR libstdc++/86450 use -Wabi=2 and simplify -Werror use 2018-07-17 14:18:47 +01:00
linkage.m4

README

file: libstdc++-v3/README

New users may wish to point their web browsers to the file
index.html in the 'doc/html' subdirectory.  It contains brief
building instructions and notes on how to configure the library in
interesting ways.