mutex (call_once): Remove parentheses to fix error in c++1y and gnu++1y mode.

* 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.

From-SVN: r199875
This commit is contained in:
Jonathan Wakely 2013-06-09 23:54:07 +00:00 committed by Jonathan Wakely
parent 0d00888247
commit bd24ec2de0
3 changed files with 21 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2013-06-09 Jonathan Wakely <jwakely.gcc@gmail.com>
* 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.

View File

@ -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)

View File

@ -24,6 +24,7 @@
#include <mutex>
#include <thread>
#include <system_error>
#include <testsuite_hooks.h>
@ -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();
}