blob: 2d58e8daecff65f1c3c9fe518817d184fc3b1393 (
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-sra" } */
struct D
{
long a;
short b;
};
struct S {
struct D *b;
int c;
int s;
};
struct D * __attribute__((malloc)) some_realloc_function (int c);
static void __attribute__((noinline))
realloc_s (struct S *p)
{
int s = p->c ? p->c * 2 : 16;
p->b = some_realloc_function (s);
p->s = s;
return;
}
void modify (struct D *d);
int test (struct D *d);
static struct D gd;
int
foo (void)
{
struct S stack;
stack.c = 1;
stack.s = 0;
realloc_s (&stack);
stack.b[0] = gd;
stack.c = 1;
while (stack.c)
{
struct D d = stack.b[--stack.c];
if (test (&d))
{
for (int i = 0; i < 8; i++)
{
if (stack.s <= stack.c + 1)
realloc_s (&stack);
modify(&d);
stack.b[stack.c++] = d;
}
}
}
return 0;
}
/* { dg-final { scan-tree-dump "Created a replacement for stack offset" "sra"} } */
|