https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116634
Bug ID: 116634 Summary: constexpr string arrays dont compile in gcc 14.x but works for gcc 13 and earlier. Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: horserad12 at outlook dot com Target Milestone: --- Created attachment 59063 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59063&action=edit preprocessed file While declaring a constexpr string array, the first string argument appears to get partially skipped. Only the string length gets inferred, but the string itself is missing leading to a compilation error. The code fails to compile in gcc 14.x. but has been tried and tested on gcc 9, 10, 11, 12 and 13. The bug also shows up in gcc-trunk as tested through https://gcc.godbolt.org/ COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++,rust --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 14.2.1 20240805 (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/cc1plus -E -quiet -v -D_GNU_SOURCE t1.cpp -mtune=generic -march=x86-64 -fpch-preprocess -o a-t1.ii ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../x86_64-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1 /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/backward /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/cc1plus -fpreprocessed a-t1.ii -quiet -dumpdir a- -dumpbase t1.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o a-t1.s GNU C++17 (GCC) version 14.2.1 20240805 (x86_64-pc-linux-gnu) compiled by GNU C version 14.2.1 20240805, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 438deb6040cbc4b51ad3ab8b369917b9 t1.cpp: In instantiation of ‘constexpr Any<N>::Any(ConstString (&&)[N]) [with int N = 2]’: t1.cpp:55:33: required from here 55 | return {{ConstString(c1)...}}; | ^ t1.cpp:62:45: in ‘constexpr’ expansion of ‘Any_of(const char (&)[N1]...) [with int ...N1 = {5, 4}]("def")’ t1.cpp:45:44: error: invalid initializer for array member ‘ConstString Any<2>::vec [2]’ 45 | Any(ConstString (&&_vec)[N]) noexcept: vec(_vec){} | ^~~~~~~~~ t1.cpp: In instantiation of ‘constexpr Any<N>::Any(ConstString (&&)[N]) [with int N = 3]’: t1.cpp:55:33: required from here 55 | return {{ConstString(c1)...}}; | ^ t1.cpp:63:45: in ‘constexpr’ expansion of ‘Any_of(const char (&)[N1]...) [with int ...N1 = {3, 5, 4}]("abcd", "def")’ t1.cpp:45:44: error: invalid initializer for array member ‘ConstString Any<3>::vec [3]’ 45 | Any(ConstString (&&_vec)[N]) noexcept: vec(_vec){} | ^~~~~~~~~