2009-07-17 Richard Guenther <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / ssa-pta-fn-1.c
blob80785f01f11f9b7f6bcc37891f66c2f23c69da55
1 /* { dg-do run } */
2 /* { dg-options "-fdump-tree-alias" } */
3 /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
5 extern void abort (void);
6 int *glob;
7 int dummy;
9 int * __attribute__((noinline,const))
10 foo_const(int *p) { return p; }
12 int * __attribute__((noinline,pure))
13 foo_pure(int *p) { return p + dummy; }
15 int * __attribute__((noinline))
16 foo_normal(int *p) { glob = p; return p; }
18 void test_const(void)
20 int i;
21 int *p = &i;
22 int *q_const = foo_const(p);
23 *p = 1;
24 *q_const = 2;
25 if (*p != 2)
26 abort ();
29 void test(void)
31 int i;
32 int *p = &i;
33 int *q_normal = foo_normal(p);
34 *p = 1;
35 *q_normal = 2;
36 if (*p != 2)
37 abort ();
40 void test_pure(void)
42 int i;
43 int *p = &i;
44 int *q_pure = foo_pure(p);
45 *p = 1;
46 *q_pure = 2;
47 if (*p != 2)
48 abort ();
51 int main()
53 test_const();
54 test();
55 test_pure();
56 return 0;
59 /* { dg-final { scan-tree-dump "q_const_., points-to non-local, points-to vars: { i }" "alias" } } */
60 /* { dg-final { scan-tree-dump "q_pure_., points-to non-local, points-to escaped, points-to vars: { i }" "alias" } } */
61 /* { dg-final { scan-tree-dump "q_normal_., points-to non-local, points-to escaped, points-to vars: { }" "alias" } } */
62 /* { dg-final { cleanup-tree-dump "alias" } } */