https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90172
Bug ID: 90172
Summary: [9 Regression] ICE: Segmentation fault (in
contains_struct_check)
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Keywords: error-recovery
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: asolokha at gmx dot com
Target Milestone: ---
g++-9.0.0-alpha20190414 snapshot (r270355) ICEs when compiling the following
testcase extracted from test/SemaCXX/cxx1y-generic-lambdas.cpp from the clang
8.0.0 test suite w/ -std=c++17:
template<class ... Ts> int fooV(Ts ... ts) {
auto L = [](auto ... a) {
auto M = [](decltype(a) ... b) -> void {
};
return M;
};
decltype(L(L, ts...)) (*fp)(decltype(L), decltype(ts) ...) = L;
return 0;
}
int run2 = fooV("BC", 3, 2.77, 'A', float{}, short{}, unsigned{});
% g++-9.0.0-alpha20190414 -std=c++17 -c mziudrma.cpp
mziudrma.cpp: In instantiation of 'int fooV(Ts ...) [with Ts = {const char*,
int, double, char, float, short int, unsigned int}]':
mziudrma.cpp:13:65: required from here
mziudrma.cpp:3:14: error: expansion pattern 'decltype (#'nontype_argument_pack'
not supported by dump_expr#<expression error>)' contains no parameter packs
3 | auto M = [](decltype(a) ... b) -> void {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 | };
| ~
mziudrma.cpp: In instantiation of 'static constexpr decltype (((const fooV(Ts
...) [with Ts = {const char*, int, double, char, float, short int, unsigned
int}]::<lambda(auto:1 ...)>*)0)->operator()<auto:1
...>(static_cast<auto:1&>(fooV::__lambda2::_FUN::<unnamed>) ...)) fooV(Ts ...)
[with Ts = {const char*, int, double, char, float, short int, unsigned
int}]::<lambda(auto:1 ...)>::_FUN(auto:1 ...) [with auto:1 = {fooV(Ts ...)
[with Ts = {const char*, int, double, char, float, short int, unsigned
int}]::<lambda(auto:1 ...)>, const char*, int, double, char, float, short int,
unsigned int}; decltype (((const fooV(Ts ...) [with Ts = {const char*, int,
double, char, float, short int, unsigned int}]::<lambda(auto:1
...)>*)0)->operator()<auto:1
...>(static_cast<auto:1&>(fooV::__lambda2::_FUN::<unnamed>) ...)) = void]':
mziudrma.cpp:2:12: required from 'constexpr fooV(Ts ...) [with Ts = {const
char*, int, double, char, float, short int, unsigned int}]::<lambda(auto:1
...)>::operator decltype (((const fooV(Ts ...) [with Ts = {const char*, int,
double, char, float, short int, unsigned int}]::<lambda(auto:1
...)>*)0)->operator()<auto:1
...>(static_cast<auto:1&>(fooV::__lambda2::_FUN::<unnamed>) ...)) (*)(auto:1
...)() const [with auto:1 = {fooV(Ts ...) [with Ts = {const char*, int, double,
char, float, short int, unsigned int}]::<lambda(auto:1 ...)>, const char*, int,
double, char, float, short int, unsigned int}; decltype (((const fooV(Ts ...)
[with Ts = {const char*, int, double, char, float, short int, unsigned
int}]::<lambda(auto:1 ...)>*)0)->operator()<auto:1
...>(static_cast<auto:1&>(fooV::__lambda2::_FUN::<unnamed>) ...)) = void]'
mziudrma.cpp:8:27: required from 'int fooV(Ts ...) [with Ts = {const char*,
int, double, char, float, short int, unsigned int}]'
mziudrma.cpp:13:65: required from here
mziudrma.cpp:2:12: internal compiler error: Segmentation fault
2 | auto L = [](auto ... a) {
| ^~~~~~~~~~~~~~~~
3 | auto M = [](decltype(a) ... b) -> void {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 | };
| ~~
5 | return M;
| ~~~~~~~~~
6 | };
| ~
0xf780df crash_signal
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/toplev.c:326
0x87eb94 contains_struct_check(tree_node*, tree_node_structure_enum, char
const*, int, char const*)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/tree.h:3289
0x87eb94 build_call_a(tree_node*, int, tree_node**)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/call.c:396
0x9d5142 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:18886
0x9df6af tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:18238
0x9df6af tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:17914
0x9e0ed6 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:17030
0x9df721 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:17321
0x9df096 instantiate_decl(tree_node*, bool, bool)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:24774
0xa0569b instantiate_pending_templates(int)
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/pt.c:24890
0x91e770 c_parse_final_cleanups()
/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190414/work/gcc-9-20190414/gcc/cp/decl2.c:4818