c++: Set type on dependent ARROW_EXPR
Even if the operand of -> has dependent type, if it's a pointer we know that the result will be the target type of that pointer. This should avoid some unnecessary TYPEOF_EXPR when looking up a name after ->. gcc/cp/ChangeLog: * typeck2.c (build_x_arrow): Do set TREE_TYPE when operand is a dependent pointer.
This commit is contained in:
parent
ee914ec4f8
commit
771fd4aef9
1 changed files with 9 additions and 3 deletions
|
@ -1913,11 +1913,17 @@ build_x_arrow (location_t loc, tree expr, tsubst_flags_t complain)
|
|||
|
||||
if (processing_template_decl)
|
||||
{
|
||||
if (type && TYPE_PTR_P (type)
|
||||
&& !dependent_scope_p (TREE_TYPE (type)))
|
||||
tree ttype = NULL_TREE;
|
||||
if (type && TYPE_PTR_P (type))
|
||||
ttype = TREE_TYPE (type);
|
||||
if (ttype && !dependent_scope_p (ttype))
|
||||
/* Pointer to current instantiation, don't treat as dependent. */;
|
||||
else if (type_dependent_expression_p (expr))
|
||||
return build_min_nt_loc (loc, ARROW_EXPR, expr);
|
||||
{
|
||||
expr = build_min_nt_loc (loc, ARROW_EXPR, expr);
|
||||
TREE_TYPE (expr) = ttype;
|
||||
return expr;
|
||||
}
|
||||
expr = build_non_dependent_expr (expr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue