[Bug c++/88795] ICE on class-template argument deduction if non-type parameter has indirection

dmalcolm at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Feb 14 23:15:00 GMT 2019


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  <dmalcolm@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  <dmalcolm@redhat.com>

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

gcc/ChangeLog:
        Backport of r267957 from trunk.
        2019-01-15  David Malcolm  <dmalcolm@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


More information about the Gcc-bugs mailing list