1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-ipa-pure-const-details -fdelete-null-pointer-checks" } */
3 
4 static void *foo(__SIZE_TYPE__, int) __attribute__((noinline, no_icf, used));
5 
6 __attribute__((noinline, used, no_icf))
bar(__SIZE_TYPE__ n,int m)7 static void *bar(__SIZE_TYPE__ n, int m)
8 {
9   return foo (n, m);
10 }
11 
foo(__SIZE_TYPE__ n,int m)12 static void *foo(__SIZE_TYPE__ n, int m)
13 {
14   void *p;
15   if (m > 0)
16     p = bar (n, --m);
17   else
18     p = __builtin_malloc (n);
19 
20   return p;
21 }
22 
23 /* { dg-final { scan-ipa-dump "Function foo found to be malloc" "pure-const" } } */
24 /* { dg-final { scan-ipa-dump "Function bar found to be malloc" "pure-const" } } */
25