https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113763
Bug ID: 113763
Summary: [14 Regression] build fails with clang++ host compiler
because aarch64.cc uses C++14 constexpr.
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: build
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: iains at gcc dot gnu.org
CC: rsandifo at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
On aarch64, can no longer bootstrap GCC using clang because:
/src-local/gcc-master-patched/gcc/config/aarch64/aarch64.cc:13654:50: error:
constexpr variable 'tiles' must be initialized by a constant expression
static constexpr std::pair<unsigned int, char> tiles[] = {
^ ~
/src-local/gcc-master-patched/gcc/config/aarch64/aarch64.cc:13655:5: note:
non-constexpr constructor 'pair<int, char, nullptr>' cannot be used in a
constant expression
{ 0xff, 'b' },
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/__utility/pair.h:194:5:
note: declared here
pair(_U1&& __u1, _U2&& __u2)
^
It seems that GCC accepts this back to at least gcc-4.7 for std=c++11 but, at
least cppreference says that form is only constexpr from c++14 and clang++ does
not accept it.
https://en.cppreference.com/w/cpp/utility/pair/pair
trivial reproducer:
static constexpr std::pair<unsigned int, char> tiles[] = {
{ 0xff, 'b' },
{ 0x55, 'h' },
{ 0x11, 's' },
{ 0x01, 'd' }
};
int main(){}