c++: ts_lambda is not needed
authorNathan Sidwell <nathan@acm.org>
Mon, 21 Sep 2020 15:55:15 +0000 (08:55 -0700)
committerNathan Sidwell <nathan@acm.org>
Mon, 21 Sep 2020 18:53:14 +0000 (11:53 -0700)
We don't need ts_lambda, as IDENTIFIER_LAMBDA_P is sufficient.  Killed thusly.

gcc/cp/
* decl.c (xref_tag_1): Use IDENTIFIER_LAMBDA_P to detect lambdas.
* lambda.c (begin_lambda_type): Use ts_current to push the tag.
* name-lookup.h (enum tag_scope): Drop ts_lambda.

gcc/cp/decl.c
gcc/cp/lambda.c
gcc/cp/name-lookup.h

index af796499df711ee2bb545de402d0711acb90e5b9..bbecebe7a62de702bfc3b0c7bba5643e073ee0a6 100644 (file)
@@ -14857,10 +14857,10 @@ check_elaborated_type_specifier (enum tag_types tag_code,
   return type;
 }
 
-/* Lookup NAME in elaborate type specifier in scope according to
-   SCOPE and issue diagnostics if necessary.
-   Return *_TYPE node upon success, NULL_TREE when the NAME is not
-   found, and ERROR_MARK_NODE for type error.  */
+/* Lookup NAME of an elaborated type specifier according to SCOPE and
+   issue diagnostics if necessary.  Return *_TYPE node upon success,
+   NULL_TREE when the NAME is not found, and ERROR_MARK_NODE for type
+   error.  */
 
 static tree
 lookup_and_check_tag (enum tag_types tag_code, tree name,
@@ -14997,9 +14997,9 @@ xref_tag_1 (enum tag_types tag_code, tree name,
   /* In case of anonymous name, xref_tag is only called to
      make type node and push name.  Name lookup is not required.  */
   tree t = NULL_TREE;
-  if (scope != ts_lambda && !IDENTIFIER_ANON_P (name))
+  if (!IDENTIFIER_ANON_P (name))
     t = lookup_and_check_tag  (tag_code, name, scope, template_header_p);
-  
+
   if (t == error_mark_node)
     return error_mark_node;
 
@@ -15052,19 +15052,14 @@ xref_tag_1 (enum tag_types tag_code, tree name,
          error ("use of enum %q#D without previous declaration", name);
          return error_mark_node;
        }
-      else
-       {
-         t = make_class_type (code);
-         TYPE_CONTEXT (t) = context;
-         if (scope == ts_lambda)
-           {
-             /* Mark it as a lambda type.  */
-             CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
-             /* And push it into current scope.  */
-             scope = ts_current;
-           }
-         t = pushtag (name, t, scope);
-       }
+
+      t = make_class_type (code);
+      TYPE_CONTEXT (t) = context;
+      if (IDENTIFIER_LAMBDA_P (name))
+       /* Mark it as a lambda type right now.  Our caller will
+          correct the value.  */
+       CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
+      t = pushtag (name, t, scope);
     }
   else
     {
index c94fe8edb8e21e070677df1b781c42ddc53ef39f..364a3e9f6b9e7056c999a86ba47e7f98911a83c3 100644 (file)
@@ -135,7 +135,7 @@ begin_lambda_type (tree lambda)
 
   /* Create the new RECORD_TYPE for this lambda.  */
   tree type = xref_tag (/*tag_code=*/record_type, name,
-                       /*scope=*/ts_lambda, /*template_header_p=*/false);
+                       /*scope=*/ts_current, /*template_header_p=*/false);
   if (type == error_mark_node)
     return error_mark_node;
 
index 723fbb0008c0289276a08b6d3d38ee997072019b..a0815e1a0ac6b8d0340ac0590b49c01f687e59f9 100644 (file)
@@ -139,7 +139,6 @@ enum tag_scope {
                                           only, for friend class lookup
                                           according to [namespace.memdef]/3
                                           and [class.friend]/9.  */
-  ts_lambda = 3                        /* Declaring a lambda closure.  */
 };
 
 struct GTY(()) cp_class_binding {