Drop MALLOC attribute for void functions.

	PR ipa/93583
	* cgraph.c (cgraph_node::verify_node): Verify MALLOC attribute
	and return type of functions.
	* ipa-param-manipulation.c (ipa_param_adjustments::adjust_decl):
	Drop MALLOC attribute for void functions.
	* ipa-pure-const.c (funct_state_summary_t::duplicate): Drop
	malloc_state for a new VOID clone.
	PR ipa/93583
	* gcc.dg/ipa/pr93583.c: New test.
parent ea0b1252
2020-02-18 Martin Liska <mliska@suse.cz> 2020-02-18 Martin Liska <mliska@suse.cz>
PR ipa/93583
* cgraph.c (cgraph_node::verify_node): Verify MALLOC attribute
and return type of functions.
* ipa-param-manipulation.c (ipa_param_adjustments::adjust_decl):
Drop MALLOC attribute for void functions.
* ipa-pure-const.c (funct_state_summary_t::duplicate): Drop
malloc_state for a new VOID clone.
2020-02-18 Martin Liska <mliska@suse.cz>
PR ipa/92924 PR ipa/92924
* common.opt: Add -fprofile-reproducibility. * common.opt: Add -fprofile-reproducibility.
* doc/invoke.texi: Document it. * doc/invoke.texi: Document it.
......
...@@ -3374,6 +3374,13 @@ cgraph_node::verify_node (void) ...@@ -3374,6 +3374,13 @@ cgraph_node::verify_node (void)
error ("calls_comdat_local is set outside of a comdat group"); error ("calls_comdat_local is set outside of a comdat group");
error_found = true; error_found = true;
} }
if (DECL_IS_MALLOC (decl)
&& !POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
{
error ("malloc attribute should be used for a function that "
"returns a pointer");
error_found = true;
}
for (e = indirect_calls; e; e = e->next_callee) for (e = indirect_calls; e; e = e->next_callee)
{ {
if (e->aux) if (e->aux)
......
...@@ -410,6 +410,10 @@ ipa_param_adjustments::adjust_decl (tree orig_decl) ...@@ -410,6 +410,10 @@ ipa_param_adjustments::adjust_decl (tree orig_decl)
DECL_VIRTUAL_P (new_decl) = 0; DECL_VIRTUAL_P (new_decl) = 0;
DECL_LANG_SPECIFIC (new_decl) = NULL; DECL_LANG_SPECIFIC (new_decl) = NULL;
/* Drop MALLOC attribute for a void function. */
if (m_skip_return)
DECL_IS_MALLOC (new_decl) = 0;
return new_decl; return new_decl;
} }
......
...@@ -1157,11 +1157,14 @@ funct_state_summary_t::insert (cgraph_node *node, funct_state_d *state) ...@@ -1157,11 +1157,14 @@ funct_state_summary_t::insert (cgraph_node *node, funct_state_d *state)
/* Called when new clone is inserted to callgraph late. */ /* Called when new clone is inserted to callgraph late. */
void void
funct_state_summary_t::duplicate (cgraph_node *, cgraph_node *, funct_state_summary_t::duplicate (cgraph_node *, cgraph_node *dst,
funct_state_d *src_data, funct_state_d *src_data,
funct_state_d *dst_data) funct_state_d *dst_data)
{ {
new (dst_data) funct_state_d (*src_data); new (dst_data) funct_state_d (*src_data);
if (dst_data->malloc_state == STATE_MALLOC
&& VOID_TYPE_P (TREE_TYPE (TREE_TYPE (dst->decl))))
dst_data->malloc_state = STATE_MALLOC_BOTTOM;
} }
......
2020-02-18 Martin Liska <mliska@suse.cz>
PR ipa/93583
* gcc.dg/ipa/pr93583.c: New test.
2020-02-18 David Malcolm <dmalcolm@redhat.com> 2020-02-18 David Malcolm <dmalcolm@redhat.com>
PR analyzer/93777 PR analyzer/93777
......
/* PR ipa/93583 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
void *bar(const char*);
static void *__attribute__((malloc,noinline)) foo(const char *p)
{
return bar (p);
}
int main(int argc, char **argv)
{
foo (argv[0]);
return 0;
}
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