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)

Reply via email to