https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115761

            Bug ID: 115761
           Summary: Huge .o and compile times related to lambda debug
                    strings
           Product: gcc
           Version: 14.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: antony at liquidinstruments dot com
  Target Milestone: ---

Created attachment 58574
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58574&action=edit
Preprocessed minimal reproduction

The minimal test case attached takes approx. 60s to compile into a 1.3 Gb
object file when -g is used.

I *think* that the way GCC chooses to represent the type of lambdas as text in
debug_strs (and __PRETTY_FUNCTION__) is subject to exponential blowup in this
use pattern.  The test case is fine in GCC < 11, clang and MSVC, all of which
use(d) a different strategy to stringify lambdas.

$ time docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp gcc:latest
gcc -v -save-temps -Wall -g -c bug.cpp
Using built-in specs.
COLLECT_GCC=gcc
Target: aarch64-linux-gnu
Configured with: /usr/src/gcc/configure --build=aarch64-linux-gnu
--disable-multilib --enable-languages=c,c++,fortran,go
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.1.0 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-Wall' '-g' '-c' '-mlittle-endian'
'-mabi=lp64'
 /usr/local/libexec/gcc/aarch64-linux-gnu/14.1.0/cc1plus -E -quiet -v
-imultiarch aarch64-linux-gnu -D_GNU_SOURCE bug.cpp -mlittle-endian -mabi=lp64
-Wall -g -fworking-directory -fpch-preprocess -o bug.ii
ignoring nonexistent directory "/usr/local/include/aarch64-linux-gnu"
ignoring nonexistent directory
"/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/include-fixed/aarch64-linux-gnu"
ignoring nonexistent directory
"/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../../aarch64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../../include/c++/14.1.0

/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../../include/c++/14.1.0/aarch64-linux-gnu

/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../../include/c++/14.1.0/backward
 /usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/include
 /usr/local/include
 /usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/include-fixed
 /usr/include/aarch64-linux-gnu
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-Wall' '-g' '-c' '-mlittle-endian'
'-mabi=lp64'
 /usr/local/libexec/gcc/aarch64-linux-gnu/14.1.0/cc1plus -fpreprocessed bug.ii
-quiet -dumpbase bug.cpp -dumpbase-ext .cpp -mlittle-endian -mabi=lp64 -g -Wall
-version -o bug.s
GNU C++17 (GCC) version 14.1.0 (aarch64-linux-gnu)
        compiled by GNU C version 14.1.0, GMP version 6.2.1, MPFR version
4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: e7e96b3dc8e1bdb1ff972ea9c82a477b
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-Wall' '-g' '-c' '-mlittle-endian'
'-mabi=lp64'
 as -v --gdwarf-5 -EL -mabi=lp64 -o bug.o bug.s
GNU assembler version 2.40 (aarch64-linux-gnu) using BFD version (GNU Binutils
for Debian) 2.40
COMPILER_PATH=/usr/local/libexec/gcc/aarch64-linux-gnu/14.1.0/:/usr/local/libexec/gcc/aarch64-linux-gnu/14.1.0/:/usr/local/libexec/gcc/aarch64-linux-gnu/:/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/:/usr/local/lib/gcc/aarch64-linux-gnu/
LIBRARY_PATH=/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/:/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../../lib64/:/lib/aarch64-linux-gnu/:/usr/lib/aarch64-linux-gnu/:/usr/local/lib/gcc/aarch64-linux-gnu/14.1.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-Wall' '-g' '-c' '-mlittle-endian'
'-mabi=lp64'
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp gcc:latest gcc -v  
0.02s user 0.01s system 0% cpu 1:09.04 total
$ ls -lh
-rw-r--r--  1 acsearle  staff   160B  2 Jul 12:38 bug.cpp
-rw-r--r--  1 acsearle  staff   311B  2 Jul 12:39 bug.ii
-rw-r--r--  1 acsearle  staff   1.3G  2 Jul 12:40 bug.o
-rw-r--r--  1 acsearle  staff   1.5G  2 Jul 12:39 bug.s

Reply via email to