http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59918
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2014-01-23 CC| |hubicka at gcc dot gnu.org, | |trippels at gcc dot gnu.org Component|tree-optimization |ipa Ever confirmed|0 |1 --- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- markus@x4 tmp % cat test.ii class NameValuePairs { public: ~NameValuePairs(); virtual bool GetVoidValue(const char *, const std::type_info &valueType, void *) const; }; class B : NameValuePairs {}; class F : virtual B {}; class G : virtual B {}; class ASN1Object { public: virtual ~ASN1Object(); }; template <class, class BASE> class GetValueHelperClass { public: GetValueHelperClass(int *, int *, const std::type_info &valueType, void *, NameValuePairs *searchFirst) { searchFirst->GetVoidValue(0, valueType, 0); } void Assignable(); }; template <class BASE, class T> GetValueHelperClass<T, int> GetValueHelper(T, int, const std::type_info &valueType, void *) { GetValueHelperClass<T, BASE>(0, 0, valueType, 0, 0); } template <class BASE> class C : ASN1Object, BASE {}; class DL_GroupParameters : F {}; template <class GP> class H : C<F> { GP m_groupParameters; }; template <class GP> class DL_PrivateKeyImpl : H<GP> {}; template <class BASE> class D : BASE {}; class ECP; template <class EC> class DL_GroupParameters_EC : DL_GroupParameters { bool GetVoidValue(const char *, const std::type_info &valueType, void *) const; }; class A : DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> > {}; template class D<A>; class I : C<G>, C<F> {}; template <class EC> bool DL_GroupParameters_EC<EC>::GetVoidValue(const char *, const std::type_info &valueType, void *) const { GetValueHelper<DL_GroupParameters>(0, 0, valueType, 0).Assignable(); } markus@x4 tmp % g++ -O2 -c test.ii test.ii: In constructor ‘GetValueHelperClass< <template-parameter-1-1>, BASE>::GetValueHelperClass(int*, int*, const std::type_info&, void*, NameValuePairs*) [with <template-parameter-1-1> = int; BASE = DL_GroupParameters]’: test.ii:18:5: internal compiler error: in record_target_from_binfo, at ipa-devirt.c:693 searchFirst->GetVoidValue(0, valueType, 0); ^ 0x9d0f2b record_target_from_binfo ../../gcc/gcc/ipa-devirt.c:693 0x9d0d2c record_target_from_binfo ../../gcc/gcc/ipa-devirt.c:728 0x9d0d2c record_target_from_binfo ../../gcc/gcc/ipa-devirt.c:728 0x9d0d2c record_target_from_binfo ../../gcc/gcc/ipa-devirt.c:728 0x9d0d2c record_target_from_binfo ../../gcc/gcc/ipa-devirt.c:728 0x9d133b possible_polymorphic_call_targets_1 ../../gcc/gcc/ipa-devirt.c:755 0x9d13b4 possible_polymorphic_call_targets_1 ../../gcc/gcc/ipa-devirt.c:762 0x9d13b4 possible_polymorphic_call_targets_1 ../../gcc/gcc/ipa-devirt.c:762 0x9d13b4 possible_polymorphic_call_targets_1 ../../gcc/gcc/ipa-devirt.c:762 0x9d3d32 possible_polymorphic_call_targets(tree_node*, long, ipa_polymorphic_call_context, bool*, void**) ../../gcc/gcc/ipa-devirt.c:1346 0x99093b possible_polymorphic_call_targets(tree_node*, bool*, void**) ../../gcc/gcc/ipa-utils.h:135 0x98db4c gimple_fold_call ../../gcc/gcc/gimple-fold.c:1193 0x98db4c fold_stmt_1 ../../gcc/gcc/gimple-fold.c:1306 0x9b01e3 gimplify_call_expr ../../gcc/gcc/gimplify.c:2427 0x9a3494 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:7412 0x9a7206 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5334 0x9a353a gimplify_cleanup_point_expr ../../gcc/gcc/gimplify.c:5110 0x9a353a gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:7804 0x9a7206 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5334 0x9a7faa gimplify_bind_expr ../../gcc/gcc/gimplify.c:1072 Please submit a full bug report,