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