blob: f5cb72daa330d4dd8b3155f8cf2f05a6f6edec55 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fno-ipa-icf -fdump-tree-optimized" } */
void test2(void)
{
int *p = __builtin_malloc (sizeof (int) * 4);
if (p == (void *)0)
__builtin_abort ();
__builtin_free (p);
}
void test5(int b)
{
int *p = __builtin_malloc (sizeof (int) * 4);
if (p)
__builtin_free (p);
}
void test6(void)
{
int *p = __builtin_malloc (sizeof (int) * 4);
if (p == (void *)0)
__builtin_abort ();
if (p)
__builtin_free (p);
}
/* We should be able to remove all malloc/free pairs with CDDCE.
Assume p was non-NULL for test2.
For test5, it doesn't matter if p is NULL or non-NULL. */
/* { dg-final { scan-tree-dump-times "free" 0 "optimized" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "malloc" 0 "optimized" { xfail *-*-* } } } */
/* But make sure we don't partially optimize for now. */
/* { dg-final { scan-tree-dump-times "free" 3 "optimized" } } */
/* { dg-final { scan-tree-dump-times "malloc" 3 "optimized" } } */