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(){}

Reply via email to