1// PR c++/70096
2// { dg-do run }
3
4int data_read;
5
6struct Holder
7{
8  void foo () { data_read = data; }
9  int data;
10};
11
12void
13poison_stack ()
14{
15  volatile char a[256];
16  __builtin_memset ((void *)a, 0xa, sizeof a);
17}
18
19template <typename F>
20void test1 ()
21{
22  Holder h;
23  h.data = 42;
24  F Holder::*fptr = &Holder::foo;
25  (h.*fptr)();
26}
27
28template <typename F>
29void test2 ()
30{
31  Holder h;
32  h.data = 42;
33  F Holder::*fptr1 = &Holder::foo;
34  F Holder::*fptr2 = fptr1;
35  (h.*fptr2)();
36}
37
38
39int main ()
40{
41  poison_stack ();
42  test1<void()>();
43  poison_stack ();
44  test2<void()>();
45}
46