https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119646
Bug ID: 119646 Summary: ICE on lix-2.92.0: internal compiler error: in flatten_await_stmt, at cp/coroutines.cc:3136 Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at gcc dot gnu.org Target Milestone: --- Created attachment 61018 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61018&action=edit serve-protocol.cc.cc.xz Observed the crash today when tried to build lix-2.92.0. It looks like at least gcc-14 and master branches are affected. Was not able to reduce to something reasonable. Attaching the full preprocessed file. To reproduce against r15-9225-g3026daa8edcc0d $ gcc/xg++ -Bgcc -c serve-protocol.cc.cc -o bug.o -std=c++23 serve-protocol.cc.cc:89244:20: warning: template-id not allowed for constructor in C++20 [-Wtemplate-id-cdtor] 89244 | explicit ref<T>(const std::shared_ptr<T> & p) | ^ serve-protocol.cc.cc:89244:20: note: remove the ‘< >’ serve-protocol.cc.cc:89250:21: warning: template-id not allowed for constructor in C++20 [-Wtemplate-id-cdtor] 89250 | explicit ref<T>(T * p) | ^ serve-protocol.cc.cc:89250:21: note: remove the ‘< >’ serve-protocol.cc.cc: In static member function ‘static nix::WireFormatGenerator nix::ServeProto::Serialise<nix::UnkeyedValidPathInfo>::write(const nix::Store&, nix::ServeProto::WriteConn, const nix::UnkeyedValidPathInfo&)’: serve-protocol.cc.cc:140160:1: internal compiler error: in flatten_await_stmt, at cp/coroutines.cc:3136 140160 | } | ^ 0x292bc77 diagnostic_context::diagnostic_impl(rich_location*, diagnostic_metadata const*, diagnostic_option_id, char const*, __va_list_tag (*) [1], diagnostic_t) ???:0 0x293eeb5 internal_error(char const*, ...) ???:0 0x29278dc fancy_abort(char const*, int, char const*) ???:0 0x8b8efc flatten_await_stmt(var_nest_node*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node**) ???:0 0x8b8bc6 flatten_await_stmt(var_nest_node*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node**) ???:0 0x8bb5c6 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8b9f95 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8b9e48 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8b9f95 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x16f8504 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8b9f95 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8b9e48 await_statement_walker(tree_node**, int*, void*) ???:0 0x16f74d6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)) ???:0 0x8bef70 cp_coroutine_transform::apply_transforms() ???:0 0x92d3bd finish_function(bool) ???: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 details: $ gcc/xg++ -Bgcc -v Reading specs from gcc/specs COLLECT_GCC=gcc/xg++ COLLECT_LTO_WRAPPER=gcc/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /home/slyfox/dev/git/gcc/configure --disable-multilib --disable-bootstrap --disable-lto --disable-libsanitizer --disable-libstdcxx-pch --enable-languages=c,c++ --disable-libgomp --disable-libquadmath --disable-libvtv CFLAGS='-O1 -g0' CXXFLAGS='-O1 -g0' LDFLAGS='-O1 -g0' Thread model: posix Supported LTO compression algorithms: zlib gcc version 15.0.1 20250405 (experimental) (GCC)