From: redi Date: Sun, 9 Jun 2013 23:54:07 +0000 (+0000) Subject: * include/std/mutex (call_once): Remove parentheses to fix error in X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1e49613638a43713b2e1113ee89922fc6cc08858;p=thirdparty%2Fgcc.git * include/std/mutex (call_once): Remove parentheses to fix error in c++1y and gnu++1y mode. * testsuite/30_threads/mutex/try_lock/2.cc: Call try_lock() in new thread to avoid undefined behaviour. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199875 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8ca5e1ac814a..5934f9bbe0ad 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2013-06-09 Jonathan Wakely + + * include/std/mutex (call_once): Remove parentheses to fix error in + c++1y and gnu++1y mode. + * testsuite/30_threads/mutex/try_lock/2.cc: Call try_lock() in new + thread to avoid undefined behaviour. + 2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> Simplify and clean up library literals. diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index 3c666c19e502..cdd05a37cbee 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -783,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __set_once_functor_lock_ptr(&__functor_lock); #endif - int __e = __gthread_once(&(__once._M_once), &__once_proxy); + int __e = __gthread_once(&__once._M_once, &__once_proxy); #ifndef _GLIBCXX_HAVE_TLS if (__functor_lock) diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc index bb3fcd412e4e..f2a67231cdad 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc @@ -24,6 +24,7 @@ #include +#include #include #include @@ -38,15 +39,18 @@ int main() m.lock(); bool b; - try - { - b = m.try_lock(); - VERIFY( !b ); - } - catch (const std::system_error& e) - { - VERIFY( false ); - } + std::thread t([&] { + try + { + b = m.try_lock(); + } + catch (const std::system_error& e) + { + VERIFY( false ); + } + }); + t.join(); + VERIFY( !b ); m.unlock(); }