https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88795
--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Author: dmalcolm Date: Thu Feb 14 23:14:56 2019 New Revision: 268915 URL: https://gcc.gnu.org/viewcvs?rev=268915&root=gcc&view=rev Log: Fix ICE on class-template argument deduction (PR c++/88795) PR c++/88795 reports an ICE building a function_type for a deduction guide when the substitution into the function signature fails, due to an error_mark_node being returned from tsubst_arg_types but not being checked for. This error_mark_node gets used as the TYPE_ARG_TYPES, leading to ICEs in various places that assume this is a TREE_LIST. This patch checks the result of tsubst_arg_types and propagates the failure if it returns error_mark_node. It also adds an assertion to build_function_type, to fail faster if passed in error_mark_node. gcc/cp/ChangeLog: Backport of r267957 from trunk. 2019-01-15 David Malcolm <dmalc...@redhat.com> PR c++/88795 * pt.c (build_deduction_guide): Bail out if tsubst_arg_types fails. gcc/testsuite/ChangeLog: Backport of r267957 from trunk. 2019-01-15 David Malcolm <dmalc...@redhat.com> PR c++/88795 * g++.dg/template/pr88795.C: New test. gcc/ChangeLog: Backport of r267957 from trunk. 2019-01-15 David Malcolm <dmalc...@redhat.com> PR c++/88795 * tree.c (build_function_type): Assert that arg_types is not error_mark_node. Added: branches/gcc-8-branch/gcc/testsuite/g++.dg/template/pr88795.C Modified: branches/gcc-8-branch/gcc/ChangeLog branches/gcc-8-branch/gcc/cp/ChangeLog branches/gcc-8-branch/gcc/cp/pt.c branches/gcc-8-branch/gcc/testsuite/ChangeLog branches/gcc-8-branch/gcc/tree.c