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

--- Comment #9 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
5)

 % cat test.ii
struct __normal_iterator get();
namespace boost {
template <class> void get();
struct A {
  A(int);
};
enum problem_selector { subgraph_iso };
template <typename, typename, typename, typename,
          typename SubGraphIsoMapCallback, problem_selector>
struct B {
  B(A, A, int, int, int, int);
  void m_fn1(SubGraphIsoMapCallback p1) {
    __normal_iterator __trans_tmp_1();
    p1(__trans_tmp_1, 0);
  }
};
template <typename Graph1, typename Graph2, typename IndexMap1,
          typename IndexMap2, typename VertexOrder1,
          typename EdgeEquivalencePredicate,
          typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback,
          problem_selector problem_selection>
void match(
    Graph1, Graph2, SubGraphIsoMapCallback p3, VertexOrder1,
    B<IndexMap1, IndexMap2, EdgeEquivalencePredicate,
      VertexEquivalencePredicate, SubGraphIsoMapCallback, problem_selection>
        p5) {
  p5.m_fn1(p3);
}
template <problem_selector problem_selection, typename GraphSmall,
          typename GraphLarge, typename IndexMapSmall, typename IndexMapLarge,
          typename VertexOrderSmall, typename EdgeEquivalencePredicate,
          typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback>
void vf2_subgraph_morphism(GraphSmall, GraphLarge, SubGraphIsoMapCallback p3,
                           IndexMapSmall, IndexMapLarge, VertexOrderSmall,
                           EdgeEquivalencePredicate,
                           VertexEquivalencePredicate) {
  B<IndexMapSmall, IndexMapLarge, EdgeEquivalencePredicate,
    VertexEquivalencePredicate, SubGraphIsoMapCallback, problem_selection>
      s(0, 0, 0, 0, 0, 0);
  match(0, 0, p3, 0, s);
}
template <typename GraphSmall, typename GraphLarge, typename IndexMapSmall,
          typename IndexMapLarge, typename VertexOrderSmall,
          typename EdgeEquivalencePredicate,
          typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback>
int vf2_subgraph_iso(GraphSmall, GraphLarge, SubGraphIsoMapCallback p3,
                     IndexMapSmall, IndexMapLarge, VertexOrderSmall,
                     EdgeEquivalencePredicate, VertexEquivalencePredicate) {
  vf2_subgraph_morphism<subgraph_iso>(0, 0, p3, 0, 0, 0, 0, 0);
}
}
using namespace boost;
struct C {
  C(int) : graph1_(0), graph2_(0) {}
  template <typename CorrespondenceMap1To2, typename CorrespondenceMap2To1>
  void operator()(CorrespondenceMap1To2 p1, CorrespondenceMap2To1) {
    get(p1);
  }
  A graph1_;
  A graph2_;
};
template <typename> void get();
void test_vf2_sub_graph_iso() { C a(vf2_subgraph_iso(0, 0, a, 0, 0, 0, 0, 0));
}


 % g++ -c test.ii
test.ii: In instantiation of ‘void C::operator()(CorrespondenceMap1To2,
CorrespondenceMap2To1) [with CorrespondenceMap1To2 = __normal_iterator (*)();
CorrespondenceMap2To1 = int]’:
test.ii:14:7:   required from ‘void boost::B< <template-parameter-1-1>,
<template-parameter-1-2>, <template-parameter-1-3>, <template-parameter-1-4>,
SubGraphIsoMapCallback, <anonymous> >::m_fn1(SubGraphIsoMapCallback) [with
<template-parameter-1-1> = int; <template-parameter-1-2> = int;
<template-parameter-1-3> = int; <template-parameter-1-4> = int;
SubGraphIsoMapCallback = C; boost::problem_selector <anonymous> =
(boost::problem_selector)0]’
test.ii:27:3:   required from ‘void boost::match(Graph1, Graph2,
SubGraphIsoMapCallback, VertexOrder1, boost::B<IndexMap1, IndexMap2,
EdgeEquivalencePredicate, VertexEquivalencePredicate, SubGraphIsoMapCallback,
problem_selection>) [with Graph1 = int; Graph2 = int; IndexMap1 = int;
IndexMap2 = int; VertexOrder1 = int; EdgeEquivalencePredicate = int;
VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C;
boost::problem_selector problem_selection = (boost::problem_selector)0]’
test.ii:40:8:   required from ‘void boost::vf2_subgraph_morphism(GraphSmall,
GraphLarge, SubGraphIsoMapCallback, IndexMapSmall, IndexMapLarge,
VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) [with
boost::problem_selector problem_selection = (boost::problem_selector)0;
GraphSmall = int; GraphLarge = int; IndexMapSmall = int; IndexMapLarge = int;
VertexOrderSmall = int; EdgeEquivalencePredicate = int;
VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C]’
test.ii:49:38:   required from ‘int boost::vf2_subgraph_iso(GraphSmall,
GraphLarge, SubGraphIsoMapCallback, IndexMapSmall, IndexMapLarge,
VertexOrderSmall, EdgeEquivalencePredicate, VertexEquivalencePredicate) [with
GraphSmall = int; GraphLarge = int; IndexMapSmall = int; IndexMapLarge = int;
VertexOrderSmall = int; EdgeEquivalencePredicate = int;
VertexEquivalencePredicate = int; SubGraphIsoMapCallback = C]’
test.ii:63:76:   required from here
test.ii:57:8: internal compiler error: in ovl_copy, at cp/tree.c:2142
     get(p1);
     ~~~^~~~
0x1046555b ovl_copy
        ../../gcc/gcc/cp/tree.c:2142
0x1046c67b lookup_maybe_add(tree_node*, tree_node*)
        ../../gcc/gcc/cp/tree.c:2384
0x1032250b name_lookup::add_fns(tree_node*)
        ../../gcc/gcc/cp/name-lookup.c:707
0x1032292b name_lookup::adl_namespace(tree_node*)
        ../../gcc/gcc/cp/name-lookup.c:732
0x1032292b name_lookup::adl_class_only(tree_node*)
        ../../gcc/gcc/cp/name-lookup.c:758
0x10322cd3 name_lookup::adl_bases(tree_node*)
        ../../gcc/gcc/cp/name-lookup.c:792
0x1032329f name_lookup::adl_class(tree_node*)
        ../../gcc/gcc/cp/name-lookup.c:835
0x10324223 name_lookup::search_adl(tree_node*, vec<tree_node*, va_gc,
vl_embed>*)
        ../../gcc/gcc/cp/name-lookup.c:1019
0x1032433b lookup_arg_dependent(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>*)
        ../../gcc/gcc/cp/name-lookup.c:1044
0x1043d093 perform_koenig_lookup(cp_expr, vec<tree_node*, va_gc, vl_embed>*,
int)
        ../../gcc/gcc/cp/semantics.c:2270
0x103d9e23 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17253
0x103c82f7 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16514
0x103c88e7 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15778
0x103c933f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15991
0x103c5397 instantiate_decl(tree_node*, bool, bool)
        ../../gcc/gcc/cp/pt.c:22958
0x1040f993 instantiate_pending_templates(int)
        ../../gcc/gcc/cp/pt.c:23079
0x102b162b c_parse_final_cleanups()
        ../../gcc/gcc/cp/decl2.c:4519
0x10522c43 c_common_parse_file()
        ../../gcc/gcc/c-family/c-opts.c:1126

Reply via email to