+2019-08-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/91378 - ICE with noexcept and auto return type.
+ * pt.c (maybe_instantiate_noexcept): push_to_top_level.
+
2019-08-06 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (check_array_designated_initializer): Use
}
else if (push_tinst_level (fn))
{
+ push_to_top_level ();
push_access_scope (fn);
push_deferring_access_checks (dk_no_deferred);
input_location = DECL_SOURCE_LOCATION (fn);
- tree save_ccp = current_class_ptr;
- tree save_ccr = current_class_ref;
/* If needed, set current_class_ptr for the benefit of
tsubst_copy/PARM_DECL. */
tree tdecl = DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (fn));
/*function_p=*/false,
/*i_c_e_p=*/true);
- current_class_ptr = save_ccp;
- current_class_ref = save_ccr;
-
/* Build up the noexcept-specification. */
spec = build_noexcept_spec (noex, tf_warning_or_error);
pop_deferring_access_checks ();
pop_access_scope (fn);
pop_tinst_level ();
+ pop_from_top_level ();
}
else
spec = noexcept_false_spec;
--- /dev/null
+// PR c++/91378
+// { dg-do compile { target c++14 } }
+
+struct B
+{
+ int i;
+};
+
+struct C
+{
+ template <class T> static auto
+ g(B b) noexcept(noexcept(b.i)) { }
+};
+
+template <class T>
+void h(T t)
+{
+ C::g<int>({});
+}