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

            Bug ID: 91590
           Summary: ICE in : canonical types differ for identical types
                    std::enable_if<C<D>::ViewConcept<
                    <template-parameter-1-1> >()> and
                    std::enable_if<C<int>::ViewConcept<
                    <template-parameter-1-1> >()>
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Keywords: ice-checking
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: jason at gcc dot gnu.org, mpolacek at gcc dot gnu.org
  Target Milestone: ---

It's quite old issue (5.1.0+):

$ cat canonical.ii
namespace std {
template <bool> struct enable_if;
}
template <typename T> using _t = typename T::type;
struct A {
  using type = int;
};
template <template <typename> class> A try_defer_(int);
template <template <typename> class C>
using defer_ = decltype(try_defer_<C>(0));
template <template <typename> class C> struct F : defer_<C> {};
struct B {
  template <typename> using invoke = int;
};
template <typename...> using and_ = _t<F<B::invoke>>;
template <typename> struct C;
struct {
  template <typename Fun> C<Fun> operator()(Fun);
} a;
template <typename> struct C {
  template <typename> using ViewConcept = and_<>;
  template <typename Rng, typename std::enable_if<(ViewConcept<Rng>())>::type>
  auto m_fn1() -> decltype(a(0)) {}
};
struct D;
C<D> b;

$ g++ canonical.ii -c -std=c++14
canonical.ii: In member function ‘C<int> C< <template-parameter-1-1>
>::m_fn1()’:
canonical.ii:23:35: warning: no return statement in function returning non-void
[-Wreturn-type]
   23 |   auto m_fn1() -> decltype(a(0)) {}
      |                                   ^
canonical.ii: In instantiation of ‘struct C<D>’:
canonical.ii:26:6:   required from here
canonical.ii:23:8: internal compiler error: canonical types differ for
identical types ‘std::enable_if<C<D>::ViewConcept< <template-parameter-1-1>
>()>’ and ‘std::enable_if<C<int>::ViewConcept< <template-parameter-1-1> >()>’
   23 |   auto m_fn1() -> decltype(a(0)) {}
      |        ^~~~~
0xa9cca6 comptypes(tree_node*, tree_node*, int)
        /home/marxin/Programming/gcc/gcc/cp/typeck.c:1494
0xa9c900 structural_comptypes
        /home/marxin/Programming/gcc/gcc/cp/typeck.c:1396
0xa2d42a reduce_template_parm_level
        /home/marxin/Programming/gcc/gcc/cp/pt.c:4280
0xa2b694 tsubst(tree_node*, tree_node*, int, tree_node*)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:14749
0xa2f897 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:19622
0xa22ad7 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:17919
0xa2cea3 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:11536
0xa2cea3 tsubst_template_arg
        /home/marxin/Programming/gcc/gcc/cp/pt.c:11547
0xa2cea3 tsubst_template_arg
        /home/marxin/Programming/gcc/gcc/cp/pt.c:11535
0xa369e2 tsubst_template_args
        /home/marxin/Programming/gcc/gcc/cp/pt.c:12578
0xa36a7a tsubst_template_args
        /home/marxin/Programming/gcc/gcc/cp/pt.c:12545
0xa42c4a tsubst_template_decl
        /home/marxin/Programming/gcc/gcc/cp/pt.c:13283
0xa39899 tsubst_decl
        /home/marxin/Programming/gcc/gcc/cp/pt.c:13477
0xa2bc3f tsubst(tree_node*, tree_node*, int, tree_node*)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:14383
0xa51f6c instantiate_class_template_1
        /home/marxin/Programming/gcc/gcc/cp/pt.c:11224
0xa51f6c instantiate_class_template(tree_node*)
        /home/marxin/Programming/gcc/gcc/cp/pt.c:11529
0xa98fed complete_type(tree_node*)
        /home/marxin/Programming/gcc/gcc/cp/typeck.c:139
0x939585 start_decl_1(tree_node*, bool)
        /home/marxin/Programming/gcc/gcc/cp/decl.c:5364
0x9548b7 start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
        /home/marxin/Programming/gcc/gcc/cp/decl.c:5327
0x9fb45e cp_parser_init_declarator
        /home/marxin/Programming/gcc/gcc/cp/parser.c:20401
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Reply via email to