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)