https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120126
Bug ID: 120126
Summary: Title: ICE in GCC with pack-dependent decltype in
lambda: cp_type_quals
Product: gcc
Version: 14.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mario.rodriguezb1 at um dot es
Target Milestone: ---
GCC crashes when deducing the type of a lambda-captured pack using
decltype(args) inside a lambda body.
```
#include <iostream>
#include <functional>
template <typename... Args>
auto sum(Args... args){
return [args...] {
typename std::remove_reference<decltype(args)>::type
temp{std::move(args)...};
};
}
int main() {
auto min = sum(1, 10);
}
```
Stack dump
```
<source>:6:70: internal compiler error: Segmentation fault
6 | typename std::remove_reference<decltype(args)>::type
temp{std::move(args)...};
|
^~~~
0x2031cbc internal_error(char const*, ...)
???:0
0x98c804 cp_type_quals(tree_node const*)
???:0
0x939b30 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x93cea7 tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
???:0
0x939b7e tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x9448a6 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x93247f instantiate_decl(tree_node*, bool, bool)
???:0
0x8320b7 maybe_instantiate_decl(tree_node*)
???:0
0x833277 mark_used(tree_node*, int)
???:0
0x7a0efe build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
???:0
0x960f4a finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
???:0
0x90ee14 c_parse_file()
???:0
0xa0d1b9 c_common_parse_file()
???:0
```
To reproduce:
Happens until 14.2
https://gcc.godbolt.org/z/116K67dhe