OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
Backported from mainline
[pf3gnuchains/gcc-fork.git]
/
gcc
/
testsuite
/
gcc.c-torture
/
execute
/
pr39100.c
1
/* Bad PTA results (incorrect store handling) was causing us to delete
2
*na = 0 store. */
3
4
typedef struct E
5
{
6
int p;
7
struct E *n;
8
} *EP;
9
10
typedef struct C
11
{
12
EP x;
13
short cn, cp;
14
} *CP;
15
16
__attribute__((noinline)) CP
17
foo (CP h, EP x)
18
{
19
EP pl = 0, *pa = &pl;
20
EP nl = 0, *na = &nl;
21
EP n;
22
23
while (x)
24
{
25
n = x->n;
26
if ((x->p & 1) == 1)
27
{
28
h->cp++;
29
*pa = x;
30
pa = &((*pa)->n);
31
}
32
else
33
{
34
h->cn++;
35
*na = x;
36
na = &((*na)->n);
37
}
38
x = n;
39
}
40
*pa = nl;
41
*na = 0;
42
h->x = pl;
43
return h;
44
}
45
46
int
47
main (void)
48
{
49
struct C c = { 0, 0, 0 };
50
struct E e[2] = { { 0, &e[1] }, { 1, 0 } };
51
EP p;
52
53
foo (&c, &e[0]);
54
if (c.cn != 1 || c.cp != 1)
55
__builtin_abort ();
56
if (c.x != &e[1])
57
__builtin_abort ();
58
if (e[1].n != &e[0])
59
__builtin_abort ();
60
if (e[0].n)
61
__builtin_abort ();
62
return 0;
63
}
64
65