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:
parent
f8f42513b0
commit
c966f2deb7
3 changed files with 39 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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])),
|
||||
|
|
30
gcc/testsuite/g++.dg/template/virtual4.C
Normal file
30
gcc/testsuite/g++.dg/template/virtual4.C
Normal 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>();
|
||||
}
|
Loading…
Add table
Reference in a new issue