https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120124
Bug ID: 120124 Summary: "g++: fatal error: Killed signal..." when reporting error involving very complex lambda type Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: whiteredredcat at gmail dot com Target Milestone: --- Created attachment 61333 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61333&action=edit pre-processed bug file. g++ crashes when trying to print an error involving an extremely long type, constructed with lambdas. If there is no error, g++ successfully compiles the file. clang++ successfully reports the error, with no delay. I suspect the problem is that g++ always prints the full type name no matter how complex, and lambdas allow me to construct a problematically long type name fast enough that I don't run into the template recursion limit first. The error and command is below: ``` $~/patches/gcc-compile/built/bin/g++ --std=c++23 bug.cpp -save-temps g++: fatal error: Killed signal terminated program cc1plus compilation terminated. ``` I must wait a long time before getting the above error. my gcc version from g++ -v ``` Using built-in specs. COLLECT_GCC=/home/plum/patches/gcc-compile/built/bin/g++ COLLECT_LTO_WRAPPER=/home/plum/patches/gcc-compile/built/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /home/plum/patches/gcc-compile/../gcc/configure --prefix=/home/plum/patches/gcc-compile/built --enable-language=c,c++ : (reconfigured) /home/plum/patches/gcc-compile/../gcc/configure --prefix=/home/plum/patches/gcc-compile/built --enable-language=c,c++ --enable-languages=c,c++,fortran,lto,objc --no-create --no-recursion Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 16.0.0 20250506 (experimental) (GCC) `` bug.cpp ``` struct foo_tag {}; template<class T> struct foo { using tag = foo_tag; T run; }; template<class T> concept isFoo = requires(T a) {a.run();}; //function to construct very complex type with lambda template<int i, class T> auto complexify(T a) requires isFoo<T> { if constexpr (i > 0) { return complexify<i-1>(foo{ [a]{ return 1+a.run(); }}); } else return a; } //base case template<int i> auto complexify(int a) { return complexify<i-1>(foo{ [a]{ return a; }}); } int main() { auto a = complexify<100>(1); int result = a.run(1); //<-- this times out because it is an error //int result = a.run(); //<-- this compiles fine return result; } // vim: ts=2 sw=2 ``` Attached is the a-bug.ii file.