[Bug c++/77564] New: Code fails to link when compiled with -O0
csaba_22 at yahoo dot co.uk
gcc-bugzilla@gcc.gnu.org
Mon Sep 12 12:29:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77564
Bug ID: 77564
Summary: Code fails to link when compiled with -O0
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: csaba_22 at yahoo dot co.uk
Target Milestone: ---
The following code fails to link when compiled with -O0. It links when compiled
with -O1 or higher, or -Og:
template <typename R>
class du {
R r;
public:
constexpr du() = default;
du(const du&) = default;
template<typename R2>
constexpr explicit du(const R2& rep)
: r(static_cast<R>(rep)) { }
};
typedef du<int> secs;
class DWP {
secs to;
public:
DWP(secs x);
};
DWP::DWP(secs x)
: to(x)
{}
class FHT {
public:
FHT()
: dwp{secs(READ_TIMEOUT)}
{}
protected:
static auto constexpr READ_TIMEOUT = 1;
DWP dwp;
};
int main()
{
FHT fht;
}
$ g++-620 -Wall -pedantic -Wextra -std=c++11 constexpr.cc -o constexpr
/tmp/ccoUUTbu.o: In function `FHT::FHT()':
constexpr.cc:(.text._ZN3FHTC2Ev[_ZN3FHTC5Ev]+0x11): undefined reference to
`FHT::READ_TIMEOUT'
$ nm constexpr.o | c++filt
0000000000000017 T main
0000000000000000 W du<int>::du<int>(int const&)
0000000000000000 T DWP::DWP(du<int>)
0000000000000000 T DWP::DWP(du<int>)
U FHT::READ_TIMEOUT
0000000000000000 W FHT::FHT()
0000000000000000 W FHT::FHT()
0000000000000000 n FHT::FHT()
If compiling with -O1:
$ nm constexpr.o | c++filt
0000000000000003 T main
0000000000000000 T DWP::DWP(du<int>)
0000000000000000 T DWP::DWP(du<int>)
Seen with a hand-built GCC 6.2:
$ g++-620 -v
Using built-in specs.
COLLECT_GCC=g++-620
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/6.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-6.2.0/configure --program-suffix=-620
--enable-version-specific-runtime-libs --enable-languages=c,c++,lto
Thread model: posix
gcc version 6.2.0 (GCC)
This has been seen with GCC as far back as
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
More information about the Gcc-bugs
mailing list