1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-local-pure-const-details" } */
3
foo(int cond1,int cond2,int cond3)4 void *foo(int cond1, int cond2, int cond3)
5 {
6 void *ret;
7 void *a;
8 void *b;
9
10 if (cond1)
11 a = __builtin_malloc (10);
12 else
13 a = __builtin_malloc (20);
14
15 if (cond2)
16 b = __builtin_malloc (30);
17 else
18 b = __builtin_malloc (40);
19
20 if (cond3)
21 ret = a;
22 else
23 ret = b;
24
25 return ret;
26 }
27
foo2(int cond1,int cond2,int cond3)28 void *foo2(int cond1, int cond2, int cond3)
29 {
30 void *ret;
31 void *a;
32 void *b;
33 void bar(void *, void *);
34
35 if (cond1)
36 a = __builtin_malloc (10);
37 else
38 a = __builtin_malloc (20);
39
40 if (cond2)
41 b = __builtin_malloc (30);
42 else
43 b = __builtin_malloc (40);
44
45 bar (a, b);
46
47 if (cond3)
48 ret = a;
49 else
50 ret = b;
51
52 return ret;
53 }
54
55 /* { dg-final { scan-tree-dump "Function found to be malloc: foo" "local-pure-const1" } } */
56 /* { dg-final { scan-tree-dump-not "Function found to be malloc: foo2" "local-pure-const1" } } */
57