aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-12-01 16:10:31 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-12-01 16:10:31 +0000
commitad8fda29e6274dd28aa11d15e98cc777f56ffb37 (patch)
treecbcd2bcd1eedc33308c2d88a1941d9e0541edb7f /libstdc++-v3
parentf03858e51d91334e1645222fa40b1f6bd563fb61 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--libstdc++-v3/include/experimental/string_view6
-rw-r--r--libstdc++-v3/include/std/string_view2
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())