+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.
+
2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
* doc/xml/manual/status_cxx2011.xml: Document aligned_union as
bool
is_lock_free() const noexcept
- { return __atomic_is_lock_free(_M_type_size(1), &_M_p); }
+ { return __atomic_is_lock_free(sizeof(__pointer_type), &_M_p); }
bool
is_lock_free() const volatile noexcept
- { return __atomic_is_lock_free(_M_type_size(1), &_M_p); }
+ { return __atomic_is_lock_free(sizeof(__pointer_type), &_M_p); }
void
store(__pointer_type __p,
--- /dev/null
+// { 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());
+}