aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-02-09 00:25:39 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-02-09 00:25:39 +0000
commit4fe5c8c730ead2286103b95a4226f9d23b95a68a (patch)
tree0b7f248aca7388225e5d71b337a99568ac7771e5
parent5b0bf81512c506d863a48fd0aeea4812c1b35a28 (diff)
downloadgcc-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/ChangeLog14
-rw-r--r--libstdc++-v3/include/bits/fs_path.h28
-rw-r--r--libstdc++-v3/src/c++17/fs_path.cc14
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;