https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115173
Bug ID: 115173 Summary: GCC hang and memory exhaustion issue with complex nested initializer lists in C++ std::string construction Product: gcc Version: 13.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: iamanonymous.cs at gmail dot com Target Milestone: --- The following code snippet triggers a hang issue: ============================================ $ cat bug.cpp #include <initializer_list> struct string { string(std::initializer_list<char>) { } }; void f() { string({}); } void g() { string(string({}); } void h() { string(string({})); } void i() { string(string(string({})); } void j() { string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(string(>) { } }; void f() { auto y = { string(Equation()) }; } ============================================ I observed that when attempting to compile this code using GCC, the compilation process hangs indefinitely. Additionally, the RAM usage continuously increases, leading to excessive consumption of system resources. However, it is worth noting that when using LLVM as the compiler, the code compiles quickly and produces the expected compilation output. We have found that this issue still persists in the latest version of GCC(see https://godbolt.org/z/oKKe5WK9v) The command we used is(no error output): ============================================ g++ bug.cpp ============================================ The GCC version: ============================================ $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.1.0-8ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2,rust --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.1.0 (Ubuntu 13.1.0-8ubuntu1~20.04.2) ============================================