From a8c80d03d4e0fab9cf4edb7bd5acb7edafd2438c Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Tue, 15 May 2018 06:07:48 +0000 Subject: [PATCH] re PR tree-optimization/83648 (missing -Wsuggest-attribute=malloc on a trivial malloc-like function) 2018-05-15 Prathamesh Kulkarni PR tree-optimization/83648 * ipa-pure-const.c (malloc_candidate_p): Allow function with NULL return value as malloc candidate. testsuite/ * gcc.dg/tree-ssa/pr83648.c: New test. * gcc.dg/tree-ssa/pr83648-2.c: Likewise. From-SVN: r260250 --- gcc/ChangeLog | 6 ++++++ gcc/ipa-pure-const.c | 20 ++++++++++++++------ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c | 15 +++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/pr83648.c | 15 +++++++++++++++ 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr83648.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 294a937..17f2cfd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-05-15 Prathamesh Kulkarni + PR tree-optimization/83648 + * ipa-pure-const.c (malloc_candidate_p): Allow function with NULL + return value as malloc candidate. + +2018-05-15 Prathamesh Kulkarni + PR ipa/85734 * ipa-pure-const.c (warn_function_malloc): Pass value of known_finite param as true in call to suggest_attribute. diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index 7665358..567b615 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -919,11 +919,13 @@ malloc_candidate_p (function *fun, bool ipa) #define DUMP_AND_RETURN(reason) \ { \ if (dump_file && (dump_flags & TDF_DETAILS)) \ - fprintf (dump_file, "%s", (reason)); \ + fprintf (dump_file, "\n%s is not a malloc candidate, reason: %s\n", \ + (node->name()), (reason)); \ return false; \ } - if (EDGE_COUNT (exit_block->preds) == 0) + if (EDGE_COUNT (exit_block->preds) == 0 + || !flag_delete_null_pointer_checks) return false; FOR_EACH_EDGE (e, ei, exit_block->preds) @@ -938,6 +940,9 @@ malloc_candidate_p (function *fun, bool ipa) if (!retval) DUMP_AND_RETURN("No return value.") + if (integer_zerop (retval)) + continue; + if (TREE_CODE (retval) != SSA_NAME || TREE_CODE (TREE_TYPE (retval)) != POINTER_TYPE) DUMP_AND_RETURN("Return value is not SSA_NAME or not a pointer type.") @@ -970,11 +975,14 @@ malloc_candidate_p (function *fun, bool ipa) for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i) { tree arg = gimple_phi_arg_def (phi, i); + if (integer_zerop (arg)) + continue; + if (TREE_CODE (arg) != SSA_NAME) - DUMP_AND_RETURN("phi arg is not SSA_NAME.") - if (!(arg == null_pointer_node || check_retval_uses (arg, phi))) - DUMP_AND_RETURN("phi arg has uses outside phi" - " and comparisons against 0.") + DUMP_AND_RETURN ("phi arg is not SSA_NAME."); + if (!check_retval_uses (arg, phi)) + DUMP_AND_RETURN ("phi arg has uses outside phi" + " and comparisons against 0.") gimple *arg_def = SSA_NAME_DEF_STMT (arg); gcall *call_stmt = dyn_cast (arg_def); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 452e6a2..90839ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-05-15 Prathamesh Kulkarni + + PR tree-optimization/83648 + * gcc.dg/tree-ssa/pr83648.c: New test. + * gcc.dg/tree-ssa/pr83648-2.c: Likewise. + 2018-05-14 Prathamesh Kulkarni PR ipa/85734 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c new file mode 100644 index 0000000..ffa7e46 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-delete-null-pointer-checks -fdump-tree-local-pure-const-details" } */ + +void *g(unsigned n) +{ + return n ? __builtin_malloc (n) : 0; +} + +void *h() +{ + return 0; +} + +/* { dg-final { scan-tree-dump-not "Function found to be malloc: g" "local-pure-const1" } } */ +/* { dg-final { scan-tree-dump-not "Function found to be malloc: h" "local-pure-const1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr83648.c b/gcc/testsuite/gcc.dg/tree-ssa/pr83648.c new file mode 100644 index 0000000..febfd7d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr83648.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-local-pure-const-details" } */ + +void *g(unsigned n) +{ + return n ? __builtin_malloc (n) : 0; +} + +void *h() +{ + return 0; +} + +/* { dg-final { scan-tree-dump "Function found to be malloc: g" "local-pure-const1" } } */ +/* { dg-final { scan-tree-dump "Function found to be malloc: h" "local-pure-const1" } } */ -- 2.7.4