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()13poison_stack () 14 { 15 volatile char a[256]; 16 __builtin_memset ((void *)a, 0xa, sizeof a); 17 } 18 19 template <typename F> test1()20void 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()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 main()39int main () 40 { 41 poison_stack (); 42 test1<void()>(); 43 poison_stack (); 44 test2<void()>(); 45 } 46