From: Marc Glisse Date: Tue, 16 May 2017 12:54:16 +0000 (+0200) Subject: optional (_Optional_base::_M_get): Check precondition. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2c27a627a31034165af6c01e07a69d867010fbbd;p=gcc.git optional (_Optional_base::_M_get): Check precondition. 2017-05-16 Marc Glisse * include/std/optional (_Optional_base::_M_get): Check precondition. * testsuite/20_util/optional/cons/value_neg.cc: Update line numbers. From-SVN: r248099 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f228a394b60..0fea52b7f40 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2017-05-16 Marc Glisse + + * include/std/optional (_Optional_base::_M_get): Check precondition. + * testsuite/20_util/optional/cons/value_neg.cc: Update line numbers. + 2017-05-16 Jonathan Wakely * doc/xml/manual/appendix_contributing.xml: Link to test docs and diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index 5aa926f0cfd..c697c1682a6 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -386,11 +386,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // The _M_get operations have _M_engaged as a precondition. constexpr _Tp& _M_get() noexcept - { return this->_M_payload._M_payload; } + { + __glibcxx_assert(_M_is_engaged()); + return this->_M_payload._M_payload; + } constexpr const _Tp& _M_get() const noexcept - { return this->_M_payload._M_payload; } + { + __glibcxx_assert(_M_is_engaged()); + return this->_M_payload._M_payload; + } // The _M_construct operation has !_M_engaged as a precondition // while _M_destruct has _M_engaged as a precondition. diff --git a/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc b/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc index 5abe26e433d..524e302fec1 100644 --- a/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc +++ b/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc @@ -37,8 +37,8 @@ int main() std::optional> oup2 = new int; // { dg-error "conversion" } struct U { explicit U(std::in_place_t); }; std::optional ou(std::in_place); // { dg-error "no matching" } - // { dg-error "no type" "" { target { *-*-* } } 487 } - // { dg-error "no type" "" { target { *-*-* } } 497 } - // { dg-error "no type" "" { target { *-*-* } } 554 } + // { dg-error "no type" "" { target { *-*-* } } 493 } + // { dg-error "no type" "" { target { *-*-* } } 503 } + // { dg-error "no type" "" { target { *-*-* } } 560 } } }