https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84630
Bug ID: 84630 Summary: internal compiler error: tree check: expected class 'type', have 'exceptional' (error_mark) in tsubst_lambda_expr, at cp/pt.c:17141 Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: vegard.nossum at gmail dot com Target Milestone: --- I was quite sure I had submitted this one but I have searched and cannot see it anywhere, my apologies if it turns out to be a duplicate. Input: template <typename...> struct c { template <const> __attribute__((noinline([] {}))) b() {} }; c<> a; Output: $ xgcc -x c++ -S - <stdin>:2:13: error: ISO C++ forbids declaration of 'parameter' with no type [-fpermissive] <stdin>:2:55: error: ISO C++ forbids declaration of 'b' with no type [-fpermissive] <stdin>: In member function 'int c< <template-parameter-1-1> >::b()': <stdin>:2:58: warning: no return statement in function returning non-void [-Wreturn-type] <stdin>: In instantiation of 'struct c<>': <stdin>:4:5: required from here <stdin>:2:53: internal compiler error: tree check: expected class 'type', have 'exceptional' (error_mark) in tsubst_lambda_expr, at cp/pt.c:17141 0x6602e9 tree_class_check_failed(tree_node const*, tree_code_class, char const*, int, char const*) /home/vegard/git/gcc/gcc/tree.c:9388 0x11dd0a0 tree_class_check(tree_node*, tree_code_class, char const*, int, char const*) /home/vegard/git/gcc/gcc/tree.h:3255 0x11dd0a0 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*) /home/vegard/git/gcc/gcc/cp/pt.c:17141 0x10f640b tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/vegard/git/gcc/gcc/cp/pt.c:18479 0x10f408a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/vegard/git/gcc/gcc/cp/pt.c:18168 0x10bfe06 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) /home/vegard/git/gcc/gcc/cp/pt.c:16973 0x1164bbf tsubst_attribute /home/vegard/git/gcc/gcc/cp/pt.c:10327 0x1174e7c apply_late_template_attributes /home/vegard/git/gcc/gcc/cp/pt.c:10428 0x117ef90 tsubst_function_decl /home/vegard/git/gcc/gcc/cp/pt.c:12687 0x1184e90 tsubst_template_decl /home/vegard/git/gcc/gcc/cp/pt.c:12804 0x1155421 tsubst_decl /home/vegard/git/gcc/gcc/cp/pt.c:12906 0x1105c06 tsubst(tree_node*, tree_node*, int, tree_node*) /home/vegard/git/gcc/gcc/cp/pt.c:13798 0x11e2760 instantiate_class_template_1 /home/vegard/git/gcc/gcc/cp/pt.c:10743 0x11ef20b instantiate_class_template(tree_node*) /home/vegard/git/gcc/gcc/cp/pt.c:11041 0x138b930 complete_type(tree_node*) /home/vegard/git/gcc/gcc/cp/typeck.c:136 0xb38193 start_decl_1(tree_node*, bool) /home/vegard/git/gcc/gcc/cp/decl.c:5244 0xc1a64f start_decl(cp_declarator const*, cp_decl_specifier_seq*, int, tree_node*, tree_node*, tree_node**) /home/vegard/git/gcc/gcc/cp/decl.c:5207 0xfa251c cp_parser_init_declarator /home/vegard/git/gcc/gcc/cp/parser.c:19589 0xfa8357 cp_parser_simple_declaration /home/vegard/git/gcc/gcc/cp/parser.c:13061 0xfae548 cp_parser_block_declaration /home/vegard/git/gcc/gcc/cp/parser.c:12879 $ xgcc --version xgcc (GCC) 8.0.1 20180228 (experimental) Built from git fd1990b25777e5f1307eac1447e8fb5fefe747b4 (r258063). 7.3.0 says: <source>:2:13: error: ISO C++ forbids declaration of 'parameter' with no type [-fpermissive] template <const> __attribute__((noinline([] {}))) b() {} ^~~~~ <source>:2:55: error: ISO C++ forbids declaration of 'b' with no type [-fpermissive] template <const> __attribute__((noinline([] {}))) b() {} ^ <source>:1: confused by earlier errors, bailing out Compiler returned: 1 Test case was reduced by C-Reduce.