diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-12-01 16:10:31 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-12-01 16:10:31 +0000 |
commit | ad8fda29e6274dd28aa11d15e98cc777f56ffb37 (patch) | |
tree | cbcd2bcd1eedc33308c2d88a1941d9e0541edb7f /libstdc++-v3 | |
parent | f03858e51d91334e1645222fa40b1f6bd563fb61 (diff) | |
download | gcc-ad8fda29e6274dd28aa11d15e98cc777f56ffb37.zip gcc-ad8fda29e6274dd28aa11d15e98cc777f56ffb37.tar.gz gcc-ad8fda29e6274dd28aa11d15e98cc777f56ffb37.tar.bz2 |
Fix narrowing conversions in string_view types
* include/experimental/string_view (basic_string_view::_S_compare):
Use value-init so narrowing conversions are not ill-formed.
* include/std/string_view (basic_string_view::_S_compare): Likewise.
From-SVN: r255321
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/string_view | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/string_view | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 14b65e3..601bc8a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2017-12-01 Jonathan Wakely <jwakely@redhat.com> + * include/experimental/string_view (basic_string_view::_S_compare): + Use value-init so narrowing conversions are not ill-formed. + * include/std/string_view (basic_string_view::_S_compare): Likewise. + * include/bits/basic_string.h (operator""s): Add pragmas to disable -Wliteral-suffix warnings. * include/experimental/string_view (operator""sv): Likewise. diff --git a/libstdc++-v3/include/experimental/string_view b/libstdc++-v3/include/experimental/string_view index 96d1f58..ef171ec 100644 --- a/libstdc++-v3/include/experimental/string_view +++ b/libstdc++-v3/include/experimental/string_view @@ -422,11 +422,11 @@ inline namespace fundamentals_v1 static constexpr int _S_compare(size_type __n1, size_type __n2) noexcept { - return difference_type{__n1 - __n2} > std::numeric_limits<int>::max() + return difference_type(__n1 - __n2) > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() - : difference_type{__n1 - __n2} < std::numeric_limits<int>::min() + : difference_type(__n1 - __n2) < std::numeric_limits<int>::min() ? std::numeric_limits<int>::min() - : static_cast<int>(difference_type{__n1 - __n2}); + : static_cast<int>(difference_type(__n1 - __n2)); } size_t _M_len; diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view index 1266a07..3b2901a 100644 --- a/libstdc++-v3/include/std/string_view +++ b/libstdc++-v3/include/std/string_view @@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr int _S_compare(size_type __n1, size_type __n2) noexcept { - const difference_type __diff{__n1 - __n2}; + const difference_type __diff = __n1 - __n2; if (__diff > std::numeric_limits<int>::max()) return std::numeric_limits<int>::max(); if (__diff < std::numeric_limits<int>::min()) |