https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89900
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> --- I think that ultimately this boils down to this code in grokdeclarator: if (type_was_error_mark_node && template_parm_flag) /* FIXME we should be able to propagate the error_mark_node as is for other contexts too. */ type = error_mark_node; else type = integer_type_node; where we use integer_type_node as a catch-all type in case of error. Certainly using error_mark_node avoids this ICE, and many other I suppose, but we are not ready yet to resolve the FIXME (what about GCC-10?!?). We may want to fix this specific ICE in a different way, for the time being.