Fix ICE on class-template argument deduction (PR c++/88795)
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 15 Jan 2019 23:29:15 +0000 (23:29 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 15 Jan 2019 23:29:15 +0000 (23:29 +0000)
commit1abb44f863d32ef738d28144d2c984603e27721a
tree763017fbe03c5c3da080d2a793ac9c587929f4f1
parentb7ec44e82bb50bd3adc294aa7e87252c79ea7294
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:
PR c++/88795
* pt.c (build_deduction_guide): Bail out if tsubst_arg_types
fails.

gcc/testsuite/ChangeLog:
PR c++/88795
* g++.dg/template/pr88795.C: New test.

gcc/ChangeLog:
PR c++/88795
* tree.c (build_function_type): Assert that arg_types is not
error_mark_node.

From-SVN: r267957
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/pr88795.C [new file with mode: 0644]
gcc/tree.c