https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91706
Bug ID: 91706 Summary: [8/9/10 Regression] ICE: tree check: expected class 'type', have 'exceptional' (error_mark) in equate_type_number_to_die, at dwarf2out.c:5782 Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: szotsaki at gmail dot com Target Milestone: --- The following test case causes internal compiler error: #include <type_traits> #include <vector> struct A { template <typename> static std::false_type fn(...); }; template <class T> struct B : public A { using fn = decltype(fn<T>(0)); using type = typename std::conditional<fn::value, std::true_type, std::false_type>::type; }; int main(){ static_assert(B<std::vector<int>>::type::value, "assertion failed"); } If you change either of them, the bug will go away: - Move A::fn() out of its structure thus make "B : public A" inheritance unnecessary - Rename B::fn to something else, like B::fn_alias. The issue first appeared in 8.1 (7.4 is fine) and still occurs with 10.0.0 20190908. Error messages: GCC 10.0: internal compiler error: tree check: expected class 'type', have 'exceptional' (error_mark) in equate_type_number_to_die, at dwarf2out.c:5782 9.2 - 8.1: internal compiler error: in is_base_type, at dwarf2out.c:12987 Related issue: Bug 87772 (though I don't know whether the path is the same which led to a similar ICE message).