// PR c++/70096 // { dg-do run } int data_read; struct Holder { void foo () { data_read = data; } int data; }; void poison_stack () { volatile char a[256]; __builtin_memset ((void *)a, 0xa, sizeof a); } template void test1 () { Holder h; h.data = 42; F Holder::*fptr = &Holder::foo; (h.*fptr)(); } template void test2 () { Holder h; h.data = 42; F Holder::*fptr1 = &Holder::foo; F Holder::*fptr2 = fptr1; (h.*fptr2)(); } int main () { poison_stack (); test1(); poison_stack (); test2(); }