re PR c++/56243 (ICE in tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6645)

PR c++/56243
	* call.c (build_over_call): Avoid virtual lookup in a template.

From-SVN: r196343
This commit is contained in:
Jason Merrill 2013-02-28 11:01:09 -05:00 committed by Jason Merrill
parent f8f42513b0
commit c966f2deb7
3 changed files with 39 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2013-02-28 Jason Merrill <jason@redhat.com>
PR c++/56243
* call.c (build_over_call): Avoid virtual lookup in a template.
2013-02-27 Jason Merrill <jason@redhat.com>
PR c++/56358

View File

@ -7033,7 +7033,10 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
if (!already_used)
mark_used (fn);
if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
/* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
functions can't be constexpr. */
&& !in_template_function ())
{
tree t;
tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),

View File

@ -0,0 +1,30 @@
// PR c++/56243
struct A
{
virtual int String ();
};
struct F: A { };
struct G
{
F value;
};
struct D
{
template <int>
void Verify()
{
G x;
F& name = x.value;
name.String();
}
};
int main()
{
D d;
d.Verify<42>();
}