https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93583
--- Comment #15 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 17 Feb 2020, marxin at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93583 > > --- Comment #14 from Martin Liška <marxin at gcc dot gnu.org> --- > (In reply to Richard Biener from comment #12) > > 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; > > } > > > > > > doesn't ICE on x86_64 > > In this testcase you don't have foo being transformed to void function: > > gcc malloc.c -c -O2 -fdump-tree-optimized=/dev/stdout > > ;; Function foo (foo, funcdef_no=0, decl_uid=1913, cgraph_uid=1, > symbol_order=0) (executed once) > > __attribute__((noinline, malloc)) > foo (const char * p) > { > void * _4; > > <bb 2> [local count: 1073741824]: > _4 = bar (p_2(D)); [tail call] > return _4; > > } 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; }