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

            Bug ID: 78743
           Summary: g++ segfaults when printing warning for captured
                    constexpr variable
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bjarni.sigurdsson at marel dot com
  Target Milestone: ---

The following code will result in a segmentation fault when compiled with g++
version 6.2.0.

// --------------------------------------------------
static constexpr double foo = 10000.0;

int main()
{
    auto foobar = [foo](){return (double)foo;};
    return 0;
}
// --------------------------------------------------


Example compile output from "g++ test_crash.cpp":

test_crash.cpp: In function 'int main()':
test_crash.cpp:5:20: warning: capture of variable 'foo' with non-automatic
storage duration
     auto foobar = [foo](){return (double)foo;};
                    ^~~
'
Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.


Fixing the warning of course resolves the crash, but also removing the
constexpr:

// --------------------------------------------------
static double foo = 10000.0;

int main()
{
    auto foobar = [foo](){return (double)foo;};
    return 0;
}
// --------------------------------------------------

Example output from "g++ test_ok.cpp":

test_ok.cpp: In function 'int main()':
test_ok.cpp:5:20: warning: capture of variable 'foo' with non-automatic storage
duration
     auto foobar = [foo](){return (double)foo;};
                    ^~~
test_ok.cpp:1:15: note: 'double foo' declared here
 static double foo = 10000.0;
               ^~~




GCC 6.2.0 was built with the following options:
Configured with: ../gcc-6.2.0/configure --prefix=/opt/plutotoolchain
--target=i686-marel-linux-gnu --with-sysroot=/opt/pluto-targets/i386-rootfs/
--enable-languages=c,c++ --enable-threads=posix --enable-shared
--disable-multilib --enable-__cxa_atexit --disable-sjlj-exceptions
--disable-nls --disable-decimal-float --disable-fixed-point
--enable-checking=release --enable-symvers=gnu --enable-c99 --enable-long-long
--enable-profile --with-system-zlib
--with-default-libstdcxx-abi=gcc4-compatible --with-tune=intel

Reply via email to