+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.
+
2019-01-15 Richard Sandiford <richard.sandiford@arm.com>
PR inline-asm/52813
+2019-01-15 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/88795
+ * pt.c (build_deduction_guide): Bail out if tsubst_arg_types
+ fails.
+
2019-01-15 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (start_decl): Improve error location.
targs = template_parms_to_args (tparms);
fparms = tsubst_arg_types (fparms, tsubst_args, NULL_TREE,
complain, ctor);
+ if (fparms == error_mark_node)
+ ok = false;
fargs = tsubst (fargs, tsubst_args, complain, ctor);
if (ci)
ci = tsubst_constraint_info (ci, tsubst_args, complain, ctor);
+2019-01-15 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/88795
+ * g++.dg/template/pr88795.C: New test.
+
2019-01-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/43136
--- /dev/null
+// { dg-do compile { target c++17 } }
+
+template<class, int>
+struct Array {};
+
+template<class T, int size_>
+struct Foo {
+ static constexpr int size() {
+ return size_;
+ }
+
+ template<class U>
+ Foo(U, Array<T, size()>) {}
+};
+
+template<class T, int size, class U>
+Foo(U, Array<T, size>) -> Foo<T, size>;
+
+int main() {
+ Array<int, 2> arr{};
+
+ Foo foo{2.0, arr};
+}
bool any_structural_p, any_noncanonical_p;
tree canon_argtypes;
+ gcc_assert (arg_types != error_mark_node);
+
if (TREE_CODE (value_type) == FUNCTION_TYPE)
{
error ("function return type cannot be function");