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