diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-02-09 00:25:39 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-02-09 00:25:39 +0000 |
commit | 4fe5c8c730ead2286103b95a4226f9d23b95a68a (patch) | |
tree | 0b7f248aca7388225e5d71b337a99568ac7771e5 | |
parent | 5b0bf81512c506d863a48fd0aeea4812c1b35a28 (diff) | |
download | gcc-4fe5c8c730ead2286103b95a4226f9d23b95a68a.zip gcc-4fe5c8c730ead2286103b95a4226f9d23b95a68a.tar.gz gcc-4fe5c8c730ead2286103b95a4226f9d23b95a68a.tar.bz2 |
Add noexcept to filesystem::path query functions
In the standard these member functions are specified in terms of the
potentially-throwing path decompositions functions, but we implement
them without constructing any new paths or doing anything else that can
throw.
PR libstdc++/71044
* include/bits/fs_path.h (path::has_root_name)
(path::has_root_directory, path::has_root_path)
(path::has_relative_path, path::has_parent_path)
(path::has_filename, path::has_stem, path::has_extension)
(path::is_absolute, path::is_relative, path::_M_find_extension): Add
noexcept.
* src/c++17/fs_path.cc (path::has_root_name)
(path::has_root_directory, path::has_root_path)
(path::has_relative_path, path::has_parent_path)
(path::has_filename, path::_M_find_extension): Add noexcept.
From-SVN: r268713
-rw-r--r-- | libstdc++-v3/ChangeLog | 14 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/fs_path.h | 28 | ||||
-rw-r--r-- | libstdc++-v3/src/c++17/fs_path.cc | 14 |
3 files changed, 35 insertions, 21 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3206127..972a098 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2019-02-09 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/71044 + * include/bits/fs_path.h (path::has_root_name) + (path::has_root_directory, path::has_root_path) + (path::has_relative_path, path::has_parent_path) + (path::has_filename, path::has_stem, path::has_extension) + (path::is_absolute, path::is_relative, path::_M_find_extension): Add + noexcept. + * src/c++17/fs_path.cc (path::has_root_name) + (path::has_root_directory, path::has_root_path) + (path::has_relative_path, path::has_parent_path) + (path::has_filename, path::_M_find_extension): Add noexcept. + 2019-02-06 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/89102 (partial) diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h index 37dcfc1..98b8dc0 100644 --- a/libstdc++-v3/include/bits/fs_path.h +++ b/libstdc++-v3/include/bits/fs_path.h @@ -359,16 +359,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 // query [[nodiscard]] bool empty() const noexcept { return _M_pathname.empty(); } - bool has_root_name() const; - bool has_root_directory() const; - bool has_root_path() const; - bool has_relative_path() const; - bool has_parent_path() const; - bool has_filename() const; - bool has_stem() const; - bool has_extension() const; - bool is_absolute() const; - bool is_relative() const { return !is_absolute(); } + bool has_root_name() const noexcept; + bool has_root_directory() const noexcept; + bool has_root_path() const noexcept; + bool has_relative_path() const noexcept; + bool has_parent_path() const noexcept; + bool has_filename() const noexcept; + bool has_stem() const noexcept; + bool has_extension() const noexcept; + bool is_absolute() const noexcept; + bool is_relative() const noexcept { return !is_absolute(); } // generation path lexically_normal() const; @@ -433,7 +433,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 void _M_append(basic_string_view<value_type>); void _M_concat(basic_string_view<value_type>); - pair<const string_type*, size_t> _M_find_extension() const; + pair<const string_type*, size_t> _M_find_extension() const noexcept; template<typename _CharT> struct _Cvt; @@ -1102,21 +1102,21 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } inline bool - path::has_stem() const + path::has_stem() const noexcept { auto ext = _M_find_extension(); return ext.first && ext.second != 0; } inline bool - path::has_extension() const + path::has_extension() const noexcept { auto ext = _M_find_extension(); return ext.first && ext.second != string_type::npos; } inline bool - path::is_absolute() const + path::is_absolute() const noexcept { #ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS return has_root_name() && has_root_directory(); diff --git a/libstdc++-v3/src/c++17/fs_path.cc b/libstdc++-v3/src/c++17/fs_path.cc index db6a1cb..268b562 100644 --- a/libstdc++-v3/src/c++17/fs_path.cc +++ b/libstdc++-v3/src/c++17/fs_path.cc @@ -1530,7 +1530,7 @@ path::parent_path() const } bool -path::has_root_name() const +path::has_root_name() const noexcept { if (_M_type() == _Type::_Root_name) return true; @@ -1540,7 +1540,7 @@ path::has_root_name() const } bool -path::has_root_directory() const +path::has_root_directory() const noexcept { if (_M_type() == _Type::_Root_dir) return true; @@ -1556,7 +1556,7 @@ path::has_root_directory() const } bool -path::has_root_path() const +path::has_root_path() const noexcept { if (_M_type() == _Type::_Root_name || _M_type() == _Type::_Root_dir) return true; @@ -1570,7 +1570,7 @@ path::has_root_path() const } bool -path::has_relative_path() const +path::has_relative_path() const noexcept { if (_M_type() == _Type::_Filename && !_M_pathname.empty()) return true; @@ -1589,7 +1589,7 @@ path::has_relative_path() const bool -path::has_parent_path() const +path::has_parent_path() const noexcept { if (!has_relative_path()) return !empty(); @@ -1597,7 +1597,7 @@ path::has_parent_path() const } bool -path::has_filename() const +path::has_filename() const noexcept { if (empty()) return false; @@ -1783,7 +1783,7 @@ path::lexically_proximate(const path& base) const } std::pair<const path::string_type*, std::size_t> -path::_M_find_extension() const +path::_M_find_extension() const noexcept { const string_type* s = nullptr; |