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