Go to file
Jonathan Wakely cf290ea325 Fix handling of an empty filename at end of a path
The C++17 std::filesystem::path grammar allows an empty filename as the
last component (to signify a trailing slash). The existing code does not
handle this consistently, sometimes an empty filename has type _Multi
and sometimes it has type _Filename. This can result in a non-empty
iterator range for an empty filename component.

This change ensures that empty paths always have type _Filename and will
yield an empty iterator range.

	* include/bits/fs_path.h (path::_M_type): Change default member
	initializer to _Filename.
	(path::begin): Create past-the-end iterator for empty path.
	* src/filesystem/std-path.cc (path::remove_filename()): Remove
	debugging check.
	(path::has_relative_path()): Return false for empty filenames.
	(path::_M_split_cmpts): Set _M_type to _Filename for empty paths.
	Fix offset of empty final component.
	* testsuite/27_io/filesystem/path/itr/components.cc: New.
	* testsuite/27_io/filesystem/path/itr/traversal.cc: Add new inputs.

From-SVN: r260616
2018-05-23 17:11:06 +01:00
INSTALL
config Improve boostrap-ubsan config (PR bootstrap/64914). 2018-05-10 10:15:42 +00:00
contrib re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-05-08 08:50:33 +00:00
fixincludes re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
gcc [arm] Remove mode26 feature bit 2018-05-23 15:26:35 +00:00
gnattools Update copyright years. 2018-01-03 11:03:58 +01:00
gotools go/build, cmd/go: update to match recent changes to gc 2018-05-09 21:49:47 +00:00
include ansidecl.h (ATTRIBUTE_NONSTRING): Define. 2018-05-02 19:21:45 +09:30
intl Require ngettext in test of system gettext implementation 2017-11-07 15:24:01 +10:30
libada re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
libatomic x86: libatomic: Do not assume ELF constructors run before IFUNC resolvers 2018-05-23 13:13:05 +02:00
libbacktrace Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libcc1 PR c++/69560 - wrong alignof(double) on x86. 2018-04-23 16:49:38 -04:00
libcpp line-map.c (linemap_init): Use placement new. 2018-05-17 19:28:34 -04:00
libdecnumber Do not use bit and for conjunction of predicates (PR c/81272). 2018-02-19 18:29:20 +00:00
libffi Backport of RISC-V support for libffi 2018-05-08 10:29:16 +00:00
libgcc RISC-V: Add RV32E support. 2018-05-18 15:53:55 -07:00
libgfortran re PR fortran/54613 ([F08] Add FINDLOC plus support MAXLOC/MINLOC with KIND=/BACK=) 2018-05-08 07:47:19 +00:00
libgo go/build, cmd/go: update to match recent changes to gc 2018-05-09 21:49:47 +00:00
libgomp re PR fortran/85841 ([F2018] reject deleted features) 2018-05-21 22:48:59 +02:00
libhsail-rt [BRIGFE] phsa-specific optimizations 2018-05-04 19:43:57 +00:00
libiberty Improve boostrap-ubsan config (PR bootstrap/64914). 2018-05-10 10:15:42 +00:00
libitm PR c++/58407 - deprecated implicit copy ops. 2018-05-18 16:02:48 -04:00
libmpx Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libobjc Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
liboffloadmic re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
libquadmath Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libsanitizer If someone has access to a 64-bit mips-linux system to test this (with the obvious edit), that'd be really nice. 2018-04-26 01:16:47 +00:00
libssp Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libstdc++-v3 Fix handling of an empty filename at end of a path 2018-05-23 17:11:06 +01:00
libvtv [testsuite] Add scan-ltrans-tree-dump 2018-05-02 12:16:32 +00:00
lto-plugin re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
maintainer-scripts re PR other/85622 (gcc-8.1.0/NEWS says it's not released yet) 2018-05-03 11:29:39 +02:00
zlib re PR bootstrap/79771 (in-tree zlib breaks build) 2017-03-14 23:01:23 -06:00
.dir-locals.el
.gitattributes add basic .gitattributes files to notice whitespace issues 2016-04-23 02:37:43 +00:00
.gitignore .gitignore: Ignore in-tree prerequisites. 2016-09-09 17:20:55 -04:00
ABOUT-NLS
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
ChangeLog * MAINTAINERS (loop-optimizer): Add myself. 2018-05-22 08:26:50 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
MAINTAINERS * MAINTAINERS (loop-optimizer): Add myself. 2018-05-22 08:26:50 +00:00
Makefile.def Remove Cilk Plus support. 2017-11-28 11:35:37 +01:00
Makefile.in re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-04-30 08:18:03 +00:00
Makefile.tpl re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-04-30 08:18:03 +00:00
README
compile
config-ml.in config-ml.in: Remove references to GCJ. 2016-11-15 16:34:02 +00:00
config.guess config.guess: Import latest version. 2018-01-03 15:25:18 +11:00
config.rpath
config.sub config.guess: Import latest version. 2018-01-03 15:25:18 +11:00
configure Add the Netronome Flow Processor (nfp) as a build target to the top-level configure.ac file. 2018-05-01 15:26:51 +00:00
configure.ac Add the Netronome Flow Processor (nfp) as a build target to the top-level configure.ac file. 2018-05-01 15:26:51 +00:00
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
missing
mkdep
mkinstalldirs
move-if-change
symlink-tree
ylwrap

README

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.