Commit a8c80d03 by Prathamesh Kulkarni Committed by Prathamesh Kulkarni

re PR tree-optimization/83648 (missing -Wsuggest-attribute=malloc on a trivial…

re PR tree-optimization/83648 (missing -Wsuggest-attribute=malloc on a trivial malloc-like function)

2018-05-15  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	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
parent 0fac5f2a
2018-05-15 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> 2018-05-15 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
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 <prathamesh.kulkarni@linaro.org>
PR ipa/85734 PR ipa/85734
* ipa-pure-const.c (warn_function_malloc): Pass value of known_finite param * ipa-pure-const.c (warn_function_malloc): Pass value of known_finite param
as true in call to suggest_attribute. as true in call to suggest_attribute.
......
...@@ -919,11 +919,13 @@ malloc_candidate_p (function *fun, bool ipa) ...@@ -919,11 +919,13 @@ malloc_candidate_p (function *fun, bool ipa)
#define DUMP_AND_RETURN(reason) \ #define DUMP_AND_RETURN(reason) \
{ \ { \
if (dump_file && (dump_flags & TDF_DETAILS)) \ 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; \ return false; \
} }
if (EDGE_COUNT (exit_block->preds) == 0) if (EDGE_COUNT (exit_block->preds) == 0
|| !flag_delete_null_pointer_checks)
return false; return false;
FOR_EACH_EDGE (e, ei, exit_block->preds) FOR_EACH_EDGE (e, ei, exit_block->preds)
...@@ -938,6 +940,9 @@ malloc_candidate_p (function *fun, bool ipa) ...@@ -938,6 +940,9 @@ malloc_candidate_p (function *fun, bool ipa)
if (!retval) if (!retval)
DUMP_AND_RETURN("No return value.") DUMP_AND_RETURN("No return value.")
if (integer_zerop (retval))
continue;
if (TREE_CODE (retval) != SSA_NAME if (TREE_CODE (retval) != SSA_NAME
|| TREE_CODE (TREE_TYPE (retval)) != POINTER_TYPE) || TREE_CODE (TREE_TYPE (retval)) != POINTER_TYPE)
DUMP_AND_RETURN("Return value is not SSA_NAME or not a 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) ...@@ -970,11 +975,14 @@ malloc_candidate_p (function *fun, bool ipa)
for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i) for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
{ {
tree arg = gimple_phi_arg_def (phi, i); tree arg = gimple_phi_arg_def (phi, i);
if (integer_zerop (arg))
continue;
if (TREE_CODE (arg) != SSA_NAME) if (TREE_CODE (arg) != SSA_NAME)
DUMP_AND_RETURN("phi arg is not SSA_NAME.") DUMP_AND_RETURN ("phi arg is not SSA_NAME.");
if (!(arg == null_pointer_node || check_retval_uses (arg, phi))) if (!check_retval_uses (arg, phi))
DUMP_AND_RETURN("phi arg has uses outside phi" DUMP_AND_RETURN ("phi arg has uses outside phi"
" and comparisons against 0.") " and comparisons against 0.")
gimple *arg_def = SSA_NAME_DEF_STMT (arg); gimple *arg_def = SSA_NAME_DEF_STMT (arg);
gcall *call_stmt = dyn_cast<gcall *> (arg_def); gcall *call_stmt = dyn_cast<gcall *> (arg_def);
......
2018-05-15 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
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 <prathamesh.kulkarni@linaro.org> 2018-05-14 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR ipa/85734 PR ipa/85734
......
/* { 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" } } */
/* { 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" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment