public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3193] c++: Set type on dependent ARROW_EXPR
@ 2021-08-27 21:40 Jason Merrill
  0 siblings, 0 replies; only message in thread
From: Jason Merrill @ 2021-08-27 21:40 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:771fd4aef999903cb928bb89f730c61a8af6e4f8

commit r12-3193-g771fd4aef999903cb928bb89f730c61a8af6e4f8
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Aug 27 10:00:49 2021 -0400

    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.

Diff:
---
 gcc/cp/typeck2.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index dcfdff2f905..5e2c23c063c 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -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);
     }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-27 21:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-27 21:40 [gcc r12-3193] c++: Set type on dependent ARROW_EXPR Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).