c++: Avoid confusing 'nested' name
authorNathan Sidwell <nathan@acm.org>
Wed, 16 Sep 2020 15:05:26 +0000 (08:05 -0700)
committerNathan Sidwell <nathan@acm.org>
Wed, 16 Sep 2020 15:10:44 +0000 (08:10 -0700)
instantiate_body has a local var call 'nested', which indicates that
this instantiation was caused during the body of some function -- not
necessarily its containing scope.  That's confusing, let's just use
'current_function_decl' directly.  Then we can also simplify the
push_to_top_level logic, which /does/ indicate whether this is an
actual nested function.  (C++ does not have nested functions, but OMP
ODRs fall into that category.  A follow up patch will use that more
usual meaning of 'nested' wrt to functions.)

gcc/cp/
* pt.c (instantiate_body): Remove 'nested' var, simplify
push_to_top logic.

gcc/cp/pt.c

index e8aa950b8fa704dc7bb76f007e66ff9b5cec3809..289452ab740c88650e6172671ff58b2c19ead71d 100644 (file)
@@ -25458,17 +25458,15 @@ instantiate_body (tree pattern, tree args, tree d)
   tree td = pattern;
   tree code_pattern = DECL_TEMPLATE_RESULT (td);
 
-  tree fn_context = decl_function_context (d);
-  if (LAMBDA_FUNCTION_P (d))
-    /* tsubst_lambda_expr resolved any references to enclosing functions.  */
-    fn_context = NULL_TREE;
-  bool nested = current_function_decl != NULL_TREE;
-  bool push_to_top = !(nested && fn_context == current_function_decl);
-
   vec<tree> omp_privatization_save;
-  if (nested)
+  if (current_function_decl)
     save_omp_privatization_clauses (omp_privatization_save);
 
+  bool push_to_top
+    = !(current_function_decl
+       && !LAMBDA_FUNCTION_P (d)
+       && decl_function_context (d) == current_function_decl);
+
   if (push_to_top)
     push_to_top_level ();
   else
@@ -25595,7 +25593,7 @@ instantiate_body (tree pattern, tree args, tree d)
   else
     pop_function_context ();
 
-  if (nested)
+  if (current_function_decl)
     restore_omp_privatization_clauses (omp_privatization_save);
 }