From 0646825443aef1495f97f719f91fdc7a5c1e26f8 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 30 Apr 2010 08:18:51 +0000 Subject: [PATCH] builtins.c (fold_builtin_1): Delete free (0). 2010-04-30 Richard Guenther * builtins.c (fold_builtin_1): Delete free (0). * gcc.dg/tree-ssa/builtin-free.c: New testcase. From-SVN: r158923 --- gcc/ChangeLog | 4 ++++ gcc/builtins.c | 6 +++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/tree-ssa/builtin-free.c | 20 ++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/builtin-free.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6abbab31411f..d20e202253c2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2010-04-30 Richard Guenther + + * builtins.c (fold_builtin_1): Delete free (0). + 2010-04-29 Jan HUbicka * gengtype.c (open_base_files): Add lto-streamer.h diff --git a/gcc/builtins.c b/gcc/builtins.c index 997c13a5505f..b514ae03b41b 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -9817,7 +9817,6 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore) enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); switch (fcode) { - case BUILT_IN_CONSTANT_P: { tree val = fold_builtin_constant_p (arg0); @@ -10199,6 +10198,11 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore) case BUILT_IN_VPRINTF: return fold_builtin_printf (loc, fndecl, arg0, NULL_TREE, ignore, fcode); + case BUILT_IN_FREE: + if (integer_zerop (arg0)) + return build_empty_stmt (loc); + break; + default: break; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9dfc098770fb..cf678b87ef39 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-04-30 Richard Guenther + + * gcc.dg/tree-ssa/builtin-free.c: New testcase. + 2010-04-29 Fabien Chêne PR c++/43890 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-free.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-free.c new file mode 100644 index 000000000000..67dd071406d3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-free.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void bar (void *); +void foo(unsigned n) +{ + void *p = __builtin_malloc (n); + if (p) + { + bar (p); + __builtin_free (p); + p = 0; + } + __builtin_free (p); +} + +/* We should remove the redundant call to free. */ + +/* { dg-final { scan-tree-dump-times "free" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ -- 2.47.2