diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-04-08 08:13:50 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-04-08 08:13:50 +0000 |
commit | 8d2318ffa323564735c39a4de251df2dfcceb346 (patch) | |
tree | ae97a7f0ad9ba0b6de268c934b2817fa5b9cf23c /gcc/cp/method.c | |
parent | 66d8ee9ce0245c8c60af96365b3072a9e25729e6 (diff) | |
download | gcc-8d2318ffa323564735c39a4de251df2dfcceb346.zip gcc-8d2318ffa323564735c39a4de251df2dfcceb346.tar.gz gcc-8d2318ffa323564735c39a4de251df2dfcceb346.tar.bz2 |
re PR c++/89914 (ICE in nothrow_spec_p, at cp/except.c:1238)
/cp
2019-04-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/89914
* semantics.c (trait_expr_value): Don't use TYPE_NOTHROW_P
when maybe_instantiate_noexcept fails.
(classtype_has_nothrow_assign_or_copy_p): Likewise.
* method.c (implicitly_declare_fn): Avoid passing error_mark_node
to build_exception_variant.
/testsuite
2019-04-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/89914
* g++.dg/ext/has_nothrow_constructor-3.C: New.
From-SVN: r270201
Diffstat (limited to 'gcc/cp/method.c')
-rw-r--r-- | gcc/cp/method.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cp/method.c b/gcc/cp/method.c index da9600c..03eea40 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -2061,7 +2061,14 @@ implicitly_declare_fn (special_function_kind kind, tree type, /* Create the function. */ fn_type = build_method_type_directly (type, return_type, parameter_types); if (raises) - fn_type = build_exception_variant (fn_type, raises); + { + if (raises != error_mark_node) + fn_type = build_exception_variant (fn_type, raises); + else + /* Can happen, eg, in C++98 mode for an ill-formed non-static data + member initializer (c++/89914). */ + gcc_assert (seen_error ()); + } fn = build_lang_decl (FUNCTION_DECL, name, fn_type); if (kind != sfk_inheriting_constructor) DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (TYPE_NAME (type)); |