re PR libstdc++/60658 (std::atomic<T*> is unexpectedly not lock-free)
PR libstdc++/60658 * include/bits/atomic_base.h (__atomic_base<_PTp*>::is_lock_free()): Use sizeof pointer type not the element type. * testsuite/29_atomics/atomic/60658.cc: New. From-SVN: r208819
This commit is contained in:
parent
b5165eb022
commit
5ec16257ca
@ -1,3 +1,10 @@
|
||||
2014-03-25 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/60658
|
||||
* include/bits/atomic_base.h (__atomic_base<_PTp*>::is_lock_free()):
|
||||
Use sizeof pointer type not the element type.
|
||||
* testsuite/29_atomics/atomic/60658.cc: New.
|
||||
|
||||
2014-03-24 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: Update.
|
||||
|
@ -768,11 +768,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
bool
|
||||
is_lock_free() const noexcept
|
||||
{ return __atomic_is_lock_free(_M_type_size(1), nullptr); }
|
||||
{ return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
|
||||
|
||||
bool
|
||||
is_lock_free() const volatile noexcept
|
||||
{ return __atomic_is_lock_free(_M_type_size(1), nullptr); }
|
||||
{ return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
|
||||
|
||||
_GLIBCXX_ALWAYS_INLINE void
|
||||
store(__pointer_type __p,
|
||||
|
43
libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
Normal file
43
libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
Normal file
@ -0,0 +1,43 @@
|
||||
// { dg-require-atomic-builtins "" }
|
||||
// { dg-options "-std=gnu++11" }
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <atomic>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
// libstdc++/60658
|
||||
|
||||
struct Foo {
|
||||
char buf[1];
|
||||
};
|
||||
|
||||
struct Bar {
|
||||
char buf[100];
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::atomic<Foo*> a;
|
||||
std::atomic<Bar*> b;
|
||||
|
||||
VERIFY (a.is_lock_free() == b.is_lock_free());
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user