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

            Bug ID: 83102
           Summary: go bootstrap error in ast-dump.cc due to
                    __is_invocable failure
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: bootstrap
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

Bootstrapping GCC 8.0 (at r255038) on x86_64 fails with the error while
compiling gcc/go/gofrontend/ast-dump.cc:

In file included from
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/map:60,
                 from /opt/notnfs/msebor/src/gcc/svn/gcc/go/go-system.h:36,
                 from
/opt/notnfs/msebor/src/gcc/svn/gcc/go/gofrontend/ast-dump.cc:7:
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_tree.h:
In instantiation of ‘class std::_Rb_tree<Import_init*, Import_init*,
std::_Identity<Import_init*>, Import_init_lt, std::allocator<Import_init*> >’:
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_set.h:133:17:
  required from ‘class std::set<Import_init*, Import_init_lt>’
/opt/notnfs/msebor/src/gcc/svn/gcc/go/gofrontend/gogo.h:127:37:   required from
here
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_tree.h:452:7:
error: static assertion failed: comparison object must be invocable with two
arguments of key type
       static_assert(__is_invocable<const _Compare&, const _Key&, const
_Key&>{},
       ^~~~~~~~~~~~~
/opt/notnfs/msebor/src/gcc/svn/gcc/go/Make-lang.in:239: recipe for target
'go/ast-dump.o' failed


A test case for the error suggests the problem is either in libstdc++ or the
C++ front end:

$ cat t.C && g++ -S -Wall ... t.C
#include <set>

struct Import_init { int init_name () const; };


struct Import_init_lt {
  bool operator()(const Import_init* i1, const Import_init* i2)
  {
    return i1->init_name() < i2->init_name();
  }
};

class Import_init_set : public std::set<Import_init*, Import_init_lt> { };
In file included from
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/set:60,
                 from t.C:1:
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_tree.h:
In instantiation of ‘class std::_Rb_tree<Import_init*, Import_init*,
std::_Identity<Import_init*>, Import_init_lt, std::allocator<Import_init*> >’:
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_set.h:133:17:
  required from ‘class std::set<Import_init*, Import_init_lt>’
t.C:13:37:   required from here
/opt/notnfs/msebor/build/gcc-svn/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_tree.h:452:7:
error: static assertion failed: comparison object must be invocable with two
arguments of key type
       static_assert(__is_invocable<const _Compare&, const _Key&, const
_Key&>{},
       ^~~~~~~~~~~~~

Reply via email to