struct has_ctor { has_ctor(auto arg) {} }; void aaa() { has_ctor{[]<(){}}; // typo intentional } -std=c++20 <source>: In function 'void aaa()': <source>:8:17: error: expected identifier before '(' token 8 | has_ctor{[]<(){}}; | ^ <source>:8:19: error: expected '>' before '{' token 8 | has_ctor{[]<(){}}; | ^ <source>: In instantiation of 'has_ctor::has_ctor(auto:1) [with auto:1 = aaa()::<lambda()>]': <source>:3:5: required from here 3 | has_ctor(auto arg) {} | ^~~~~~~~ <source>:3:5: internal compiler error: tree check: expected tree that contains 'decl common' structure, have 'error_mark' in decl_template_parm_check, at cp/cp-tree.h:5138 0x269996c internal_error(char const*, ...) ???:0 0x96eb0f tree_contains_struct_check_failed(tree_node const*, tree_node_structure_enum, char const*, int, char const*) ???:0 0xba20c6 mangle_decl(tree_node*) ???:0 0x16c5fc5 decl_assembler_name(tree_node*) ???:0 0x16eea01 assign_assembler_name_if_needed(tree_node*) ???:0 0xe8c11d cgraph_node::analyze() ???:0 0xe8f6d1 symbol_table::finalize_compilation_unit() ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Compiler returned: 1 Online reproducer: https://godbolt.org/z/K1hjEsaf5 The ICE does not reproduce on 14.1, it's trunk only (tested on Compiler-Explorer-Build-gcc-cbf2ed4b309d54039d74be5d730299012e7681b3-binutils-2.42, 15.0.0 20240603).
>The ICE does not reproduce on 14.1, it's trunk only That is most likely because the trunk has checking turned on by default. So removing the regression marker until proven otherwise.
I suspect it was r13-3527-gf7d1d7777bb86a . + if (parm == error_mark_node) + continue; + parm = TREE_VALUE (parm); + + if (DECL_VIRTUAL_P (parm)) + // A synthetic parm, we're done. + break; The check for parm being error_mark_node should also happen on TREE_VALUE (param).