https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97986
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jsm28 at gcc dot gnu.org --- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- We end up gimplifying int * input = SAVE_EXPR <n>, (int *) &VA_ARG_EXPR <&ap>; I think this is garbage coming from the frontend which should either reject this as comment#1 says or in case the rvalue should be produced use a TARGET_EXPR for the purpose of address-taking and array-to-pointer decay. The case of a function type (which would decay to a pointer as well) is rejected: In file included from t.c:1: t.c:7:29: error: second argument to ‘va_arg’ is a function type ‘int(void)’ 7 | int *input = va_arg(ap, int()(int)); | ^~~ and clang says t.c:7:32: error: function cannot return function type 'int (int)' 7 | int *input = va_arg(ap, int()(int)); | ^ but a function can also not return an array type.