[Bug libstdc++/60658] New: std::atomic<T*> is unexpectedly not lock-free
ppluzhnikov at google dot com
gcc-bugzilla@gcc.gnu.org
Tue Mar 25 17:07:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60658
Bug ID: 60658
Summary: std::atomic<T*> is unexpectedly not lock-free
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: ppluzhnikov at google dot com
Using current trunk (r208813):
g++ -std=c++11 atomic.cc -latomic && ./a.out
a.out: atomic.cc:20: int main(): Assertion `b.is_lock_free()' failed.
As far as I can tell, this is happening because
std::__atomic_base<Bar*>::_M_type_size()
returns sizeof(Bar) instead of returning sizeof(Bar*).
// atomic.cc
#include <atomic>
#include <assert.h>
struct Foo {
char buf[1];
};
struct Bar {
char buf[100];
};
int
main ()
{
std::atomic<Foo*> a;
assert (a.is_lock_free());
std::atomic<Bar*> b;
assert (b.is_lock_free());
}
Google ref: b/13626319
More information about the Gcc-bugs
mailing list