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