[Bug c++/69774] New: Corrupted 'this' passed through lambda.
guille at cal dot berkeley.edu
gcc-bugzilla@gcc.gnu.org
Thu Feb 11 20:17:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69774
Bug ID: 69774
Summary: Corrupted 'this' passed through lambda.
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: guille at cal dot berkeley.edu
Target Milestone: ---
Created attachment 37669
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37669&action=edit
Preprocessed source
The code below compiles+runs fine on gcc 4.7, but fails on gcc version 6.0.0
20151220 (on intel Mac).
On gcc 4.7 it outputs the same two pointers (say "0x7fff5f896ba0
0x7fff5f896ba0"), while on 6.0.0 it outputs "0x7fff5f896ba0 0x7fff5f896bc0").
#include <thread>
#include <iostream>
struct Thread
: std::thread
{
Thread() = default;
template <class F, class... P> Thread(F&& task, P&&... p)
: std::thread(
[&task] (P&&... p) { task(std::forward<P> (p)...); },
std::forward<P> (p)...
)
{}
Thread& operator = (Thread&& t)
{
(std::thread&)*this = std::move((std::thread&)t);
return *this;
}
};
struct A
{
int a;
Thread t;
A()
{
t = [this] { std::cerr << &a << " \n"; };
}
~A()
{
t.join();
}
};
int main()
{
A a;
std::cerr << &a.a << " \n";
return 0;
}
More information about the Gcc-bugs
mailing list