public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3557] c++: add parsing_function_declarator predicate
@ 2021-09-15 20:26 Jason Merrill
  0 siblings, 0 replies; only message in thread
From: Jason Merrill @ 2021-09-15 20:26 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:30e025393209e1936c394e716006cdaaa6d50161

commit r12-3557-g30e025393209e1936c394e716006cdaaa6d50161
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Sep 10 16:36:21 2021 -0400

    c++: add parsing_function_declarator predicate
    
    While looking at PR96184 I noticed that we were recognizing the situation of
    parsing a function declarator based on current_binding_level, and that we
    ought to make that a predicate function.  This patch is just refactoring,
    but I just suggested using it in a review of another patch.
    
    gcc/cp/ChangeLog:
    
            * cp-tree.h (parsing_function_declarator): Declare.
            * name-lookup.c (set_decl_context_in_fn): Use it.
            * parser.c (cp_parser_direct_declarator): Use it.
            (parsing_function_declarator): New.

Diff:
---
 gcc/cp/cp-tree.h     |  1 +
 gcc/cp/name-lookup.c |  7 ++-----
 gcc/cp/parser.c      | 13 ++++++++++++-
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 060d1a0a3db..e5f632afba4 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -7136,6 +7136,7 @@ extern void cp_convert_omp_range_for (tree &, vec<tree, va_gc> *, tree &,
 				      tree &, tree &, tree &, tree &, tree &);
 extern void cp_finish_omp_range_for (tree, tree);
 extern bool parsing_nsdmi (void);
+extern bool parsing_function_declarator ();
 extern bool parsing_default_capturing_generic_lambda_in_template (void);
 extern void inject_this_parameter (tree, cp_cv_quals);
 extern location_t defparse_location (tree);
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 8e9c61e1ee8..ddee8b390f9 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -3363,12 +3363,9 @@ set_decl_context_in_fn (tree ctx, tree decl)
 
   if (!DECL_CONTEXT (decl)
       /* When parsing the parameter list of a function declarator,
-	 don't set DECL_CONTEXT to an enclosing function.  When we
-	 push the PARM_DECLs in order to process the function body,
-	 current_binding_level->this_entity will be set.  */
+	 don't set DECL_CONTEXT to an enclosing function.  */
       && !(TREE_CODE (decl) == PARM_DECL
-	   && current_binding_level->kind == sk_function_parms
-	   && current_binding_level->this_entity == NULL))
+	   && parsing_function_declarator ()))
     DECL_CONTEXT (decl) = ctx;
 }
 
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 7a0b6234350..8d60f40706b 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -23107,7 +23107,7 @@ cp_parser_direct_declarator (cp_parser* parser,
 	      else if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
 		/* Let compute_array_index_type diagnose this.  */;
 	      else if (!parser->in_function_body
-		       || current_binding_level->kind == sk_function_parms)
+		       || parsing_function_declarator ())
 		{
 		  /* Normally, the array bound must be an integral constant
 		     expression.  However, as an extension, we allow VLAs
@@ -23831,6 +23831,17 @@ parsing_nsdmi (void)
   return false;
 }
 
+/* True if we're parsing a function declarator.  */
+
+bool
+parsing_function_declarator ()
+{
+  /* this_entity is NULL for a function parameter scope while parsing the
+     declarator; it is set when parsing the body of the function.  */
+  return (current_binding_level->kind == sk_function_parms
+	  && !current_binding_level->this_entity);
+}
+
 /* Parse a late-specified return type, if any.  This is not a separate
    non-terminal, but part of a function declarator, which looks like


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

only message in thread, other threads:[~2021-09-15 20:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-15 20:26 [gcc r12-3557] c++: add parsing_function_declarator predicate 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).