semantics.c (finish_object_call_expr): Revert previous change.
1998-07-16 Mark Mitchell <mark@markmitchell.com> * semantics.c (finish_object_call_expr): Revert previous change. * call.c (build_new_method_call): Likewise. Instead, convert TYPE_DECLs to IDENTIFIERs here, in the presence of templates. From-SVN: r21240
This commit is contained in:
parent
b5044593c9
commit
c68c56f727
@ -1,3 +1,9 @@
|
||||
1998-07-16 Mark Mitchell <mark@markmitchell.com>
|
||||
|
||||
* semantics.c (finish_object_call_expr): Revert previous change.
|
||||
* call.c (build_new_method_call): Likewise. Instead, convert
|
||||
TYPE_DECLs to IDENTIFIERs here, in the presence of templates.
|
||||
|
||||
1998-07-16 Jason Merrill <jason@yorick.cygnus.com>
|
||||
|
||||
* decl.c (qualify_lookup): Handle templates.
|
||||
|
@ -3552,12 +3552,6 @@ build_new_method_call (instance, name, args, basetype_path, flags)
|
||||
template_only = 1;
|
||||
}
|
||||
|
||||
if (TREE_CODE (name) == TYPE_DECL)
|
||||
{
|
||||
cp_error ("calling type `%T' like a method", name);
|
||||
return error_mark_node;
|
||||
}
|
||||
|
||||
/* If there is an extra argument for controlling virtual bases,
|
||||
remove it for error reporting. */
|
||||
if (flags & LOOKUP_HAS_IN_CHARGE)
|
||||
|
@ -922,6 +922,25 @@ finish_object_call_expr (fn, object, args)
|
||||
tree real_fn = build_component_ref (object, fn, NULL_TREE, 1);
|
||||
return finish_call_expr (real_fn, args);
|
||||
#else
|
||||
if (TREE_CODE (fn) == TYPE_DECL)
|
||||
{
|
||||
if (processing_template_decl)
|
||||
/* This can happen on code like:
|
||||
|
||||
class X;
|
||||
template <class T> void f(T t) {
|
||||
t.X();
|
||||
}
|
||||
|
||||
We just grab the underlying IDENTIFIER. */
|
||||
fn = DECL_NAME (fn);
|
||||
else
|
||||
{
|
||||
cp_error ("calling type `%T' like a method", fn);
|
||||
return error_mark_node;
|
||||
}
|
||||
}
|
||||
|
||||
return build_method_call (object, fn, args, NULL_TREE, LOOKUP_NORMAL);
|
||||
#endif
|
||||
}
|
||||
|
@ -11,3 +11,5 @@ for_each(const Field& p, IsCompressed, C)
|
||||
{
|
||||
return p.IsCompressed();
|
||||
}
|
||||
|
||||
template bool for_each<int>(const Field& p, IsCompressed, int);
|
||||
|
Loading…
Reference in New Issue
Block a user