-
- Downloads
c++: dependence of member noexcept-spec [PR104079]
Here a stale TYPE_DEPENDENT_P/_P_VALID value for f's function type after replacing the type's DEFERRED_NOEXCEPT with the parsed dependent noexcept-spec causes us to try to instantiate g's noexcept-spec ahead of time (since it in turn appears non-dependent), leading to an ICE. This patch fixes this by clearing TYPE_DEPENDENT_P_VALID in fixup_deferred_exception_variants appropriately (as in build_cp_fntype_variant). That turns out to fix the testcase for C++17 but not for C++11/14, because it's not until C++17 that a noexcept-spec is part of (and therefore affects dependence of) the function type. Since dependence of NOEXCEPT_EXPR is defined in terms of instantiation dependence, the most appropriate fix for earlier dialects seems to be to make instantiation dependence consider dependence of a noexcept-spec. PR c++/104079 gcc/cp/ChangeLog: * pt.cc (value_dependent_noexcept_spec_p): New predicate split out from ... (dependent_type_p_r): ... here. (instantiation_dependent_r): Use value_dependent_noexcept_spec_p to consider dependence of a noexcept-spec before C++17. * tree.cc (fixup_deferred_exception_variants): Clear TYPE_DEPENDENT_P_VALID. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/noexcept74.C: New test. * g++.dg/cpp0x/noexcept74a.C: New test.
Showing
- gcc/cp/pt.cc 32 additions, 10 deletionsgcc/cp/pt.cc
- gcc/cp/tree.cc 4 additions, 0 deletionsgcc/cp/tree.cc
- gcc/testsuite/g++.dg/cpp0x/noexcept74.C 11 additions, 0 deletionsgcc/testsuite/g++.dg/cpp0x/noexcept74.C
- gcc/testsuite/g++.dg/cpp0x/noexcept74a.C 12 additions, 0 deletionsgcc/testsuite/g++.dg/cpp0x/noexcept74a.C
Loading
Please register or sign in to comment