[PR c++/87814] undefer deferred noexcept on tsubst if request
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 14 Dec 2018 21:57:07 +0000 (21:57 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 14 Dec 2018 21:57:07 +0000 (21:57 +0000)
commit3fd156b1bb5bb993e1b614008ac1a0eff58a6953
tree77e52e3c3d115cf199ba4a84a4a0df5ca0f31dbe
parent06553c89f521477d6c3ec4023d5162f90c57111d
[PR c++/87814] undefer deferred noexcept on tsubst if request

tsubst_expr and tsubst_copy_and_build are not expected to handle
DEFERRED_NOEXCEPT exprs, but if tsubst_exception_specification takes a
DEFERRED_NOEXCEPT expr with !defer_ok, it just passes the expr on for
tsubst_copy_and_build to barf.

This patch arranges for tsubst_exception_specification to combine the
incoming args with those already stored in a DEFERRED_NOEXCEPT, and
then substitute them into the pattern, when retaining a deferred
noexcept is unacceptable.

for  gcc/cp/ChangeLog

PR c++/87814
* pt.c (tsubst_exception_specification): Handle
DEFERRED_NOEXCEPT with !defer_ok.

for  gcc/testsuite/ChangeLog

PR c++/87814
* g++.dg/cpp1z/pr87814.C: New.

From-SVN: r267155
gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1z/pr87814.C [new file with mode: 0644]