On Thu, Jul 04, 2019 at 02:56:47PM +0200, Paolo Carlini wrote:
> --- cp/call.c (revision 273076)
> +++ cp/call.c (working copy)
> @@ -9845,17 +9852,6 @@ build_new_method_call_1 (tree instance, tree fns,
>
> if (call != error_mark_node)
> {
> - /* Optimize away vtable lookup if we know that this
> - function can't be overridden. We need to check if
> - the context and the type where we found fn are the same,
> - actually FN might be defined in a different class
> - type because of a using-declaration. In this case, we
> - do not want to perform a non-virtual call. */
> - if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
> - && same_type_ignoring_top_level_qualifiers_p
> - (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
> - && resolves_to_fixed_type_p (instance, 0))
> - flags |= LOOKUP_NONVIRTUAL;
> if (explicit_targs)
> flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
> /* Now we know what function is being called. */
This change broke bootstrap, as it removes the last use of binfo
variable besides the setter of that variable.
I'll commit following as obvious if I get successfully past that point in
bootstrap:
2019-07-05 Jakub Jelinek <[email protected]>
PR c++/67184
PR c++/69445
* call.c (build_new_method_call_1): Remove set but not used variable
binfo.
--- gcc/call.c.jj 2019-07-05 22:09:49.694367815 +0200
+++ gcc/call.c 2019-07-05 22:25:58.476016114 +0200
@@ -9564,7 +9564,7 @@ build_new_method_call_1 (tree instance,
struct z_candidate *candidates = 0, *cand;
tree explicit_targs = NULL_TREE;
tree basetype = NULL_TREE;
- tree access_binfo, binfo;
+ tree access_binfo;
tree optype;
tree first_mem_arg = NULL_TREE;
tree name;
@@ -9603,7 +9603,6 @@ build_new_method_call_1 (tree instance,
if (!conversion_path)
conversion_path = BASELINK_BINFO (fns);
access_binfo = BASELINK_ACCESS_BINFO (fns);
- binfo = BASELINK_BINFO (fns);
optype = BASELINK_OPTYPE (fns);
fns = BASELINK_FUNCTIONS (fns);
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
Jakub