Bug 115331 - [13/14/15 Regression] ICE-on-invalid passing a typoed lambda to a list-initializer
Summary: [13/14/15 Regression] ICE-on-invalid passing a typoed lambda to a list-initia...
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 15.0
: P4 normal
Target Milestone: 13.4
Assignee: Not yet assigned to anyone
URL:
Keywords: error-recovery, ice-checking, ice-on-invalid-code
Depends on:
Blocks: 115431
  Show dependency treegraph
 
Reported: 2024-06-03 15:25 UTC by Alfred Agrell
Modified: 2024-06-11 17:52 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2024-06-03 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alfred Agrell 2024-06-03 15:25:34 UTC
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).
Comment 1 Andrew Pinski 2024-06-03 15:28:48 UTC
>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.
Comment 2 Andrew Pinski 2024-06-03 15:34:15 UTC
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).