https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101278
Bug ID: 101278 Summary: [12 regression] g++ miscompiles cmake-3.18.5 Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at gcc dot gnu.org Target Milestone: --- Host: x86_64-pc-linux-gnu Initially noticed the failure as a cmake-3.18.5 install failure when built with today's gcc. Here is the extracted and slightly simplified example. It should concatenate "P", "S" into "PS". On -O0 it gets "PS", on -O1 it it gets "S": //$ cat cmakemain.cxx #include <algorithm> #include <initializer_list> #include <vector> #include <cstdio> static std::vector<char> cmCatViews_(std::initializer_list<const char *> views) { // assume length=3 for each input to avoid strlen std::size_t each_size = 1; std::size_t total_size = 0; for (const char * p : views) { total_size += each_size; } std::vector<char> r(total_size + 1, '\0'); std::vector<char>::iterator sit = r.begin(); for (const char * p : views) { sit = std::copy_n(p, each_size, sit); } return r; } int main(int ac, char const* const* av) { const char * v = "P"; const char * s = "S"; std::vector<char> r = cmCatViews_({v, s}); fprintf(stderr, "R: %s\n", &r[0]); return 0; } $ /tmp/gcc-native-quick-installed/bin/x86_64-pc-linux-gnu-g++ cmakemain.cxx -o b0 -O0 $ ./b0 R: PS $ /tmp/gcc-native-quick-installed/bin/x86_64-pc-linux-gnu-g++ cmakemain.cxx -o b1 -O1 $ ./b1 R: S $ /tmp/gcc-native-quick-installed/bin/x86_64-pc-linux-gnu-g++ -v Using built-in specs. COLLECT_GCC=/tmp/gcc-native-quick-installed/bin/x86_64-pc-linux-gnu-g++ COLLECT_LTO_WRAPPER=/tmp/gcc-native-quick-installed/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /home/slyfox/dev/git/gcc/configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu --enable-languages=c,c++ --disable-bootstrap --with-multilib-list=m64 --prefix=/tmp/gn/../gcc-native-quick-installed --disable-nls --without-isl --disable-libsanitizer --disable-libvtv --disable-libgomp --disable-libstdcxx-pch --disable-libunwind-exceptions CFLAGS='-O1 ' CXXFLAGS='-O1 ' Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.0.0 20210701 (experimental) (GCC)