https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93583
--- Comment #16 from Martin Liška <marxin at gcc dot gnu.org> --- > > I do: > > __attribute__((noinline, malloc)) > foo.isra (const char * p) > { > <bb 2> [local count: 1073741824]: > bar (p_1(D)); [tail call] > return; > > } > > main (int argc, char * * argv) > { > char * _1; > > <bb 2> [local count: 1073741824]: > _1 = *argv_3(D); > foo.isra (_1); > return 0; > > } My bad, I used GCC 9.2 that does not have IPA SRA pass. With my checking code: diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 294b2d392fd..6e99fbb45f4 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -3374,6 +3374,12 @@ cgraph_node::verify_node (void) error ("calls_comdat_local is set outside of a comdat group"); error_found = true; } + if (DECL_IS_MALLOC (decl) + && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) + { + error ("MALLOC attribute set on a void function"); + error_found = true; + } for (e = indirect_calls; e; e = e->next_callee) { if (e->aux) I see: $ gcc malloc.c -c -O2 -fdump-tree-optimized=/dev/stdout malloc.c:11:1: error: MALLOC attribute set on a void function 11 | } | ^ foo.isra.0/3 (foo.isra) @0x7ffff77c7438 Type: function definition analyzed Visibility: References: Referring: Clone of foo/0 Availability: local Function flags: count:1073741824 (estimated locally) local executed_once Called by: main/1 (1073741824 (estimated locally),1.00 per call) Calls: bar/2 (1073741824 (estimated locally),1.00 per call) during IPA pass: sra