Small lambda fixes.
authorJason Merrill <jason@redhat.com>
Thu, 28 Sep 2017 19:39:32 +0000 (15:39 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 28 Sep 2017 19:39:32 +0000 (15:39 -0400)
* call.c (build_special_member_call): Use the return value of
mark_lvalue_use.
* decl.c (compute_array_index_type): Likewise.
* parser.c (cp_parser_oacc_wait_list): Likewise.
* lambda.c (is_normal_capture_proxy): Handle *this capture.
(add_capture): Clarify internal_error message.

From-SVN: r253264

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/decl.c
gcc/cp/lambda.c
gcc/cp/parser.c

index 58e6f25ff204c499ccf18827fd113ca507ceee6a..eeea726afdb499f88650245dd00ccb6deb3e0102 100644 (file)
@@ -1,3 +1,12 @@
+2017-09-28  Jason Merrill  <jason@redhat.com>
+
+       * call.c (build_special_member_call): Use the return value of
+       mark_lvalue_use.
+       * decl.c (compute_array_index_type): Likewise.
+       * parser.c (cp_parser_oacc_wait_list): Likewise.
+       * lambda.c (is_normal_capture_proxy): Handle *this capture.
+       (add_capture): Clarify internal_error message.
+
 2017-09-22  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR bootstrap/81926
index e83cf99dc89af13e993a672fb3e67c9533057cb0..99a7b77efb2b3d92da71529e5ab82349778be509 100644 (file)
@@ -8845,7 +8845,7 @@ build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
              && (flags & LOOKUP_DELEGATING_CONS))
            check_self_delegation (arg);
          /* Avoid change of behavior on Wunused-var-2.C.  */
-         mark_lvalue_use (instance);
+         instance = mark_lvalue_use (instance);
          return build2 (INIT_EXPR, class_type, instance, arg);
        }
     }
index 50fa1ba402ec94ed39b095dcb16d65cfdf16bbf4..ce45c1140d6802400f0edf57af7ed1942fb1e4a5 100644 (file)
@@ -9329,7 +9329,7 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
     {
       tree type = TREE_TYPE (size);
 
-      mark_rvalue_use (size);
+      size = mark_rvalue_use (size);
 
       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
          && TREE_SIDE_EFFECTS (size))
index e4412569a611012a67d2fd5c29450955d1ee9b62..695666abbe33e869173d7e8a0b1ea499444816aa 100644 (file)
@@ -283,6 +283,8 @@ is_normal_capture_proxy (tree decl)
   if (val == error_mark_node)
     return true;
 
+  if (TREE_CODE (val) == ADDR_EXPR)
+    val = TREE_OPERAND (val, 0);
   gcc_assert (TREE_CODE (val) == COMPONENT_REF);
   val = TREE_OPERAND (val, 1);
   return DECL_NORMAL_CAPTURE_P (val);
@@ -592,7 +594,8 @@ add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p,
       && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
     {
       if (COMPLETE_TYPE_P (current_class_type))
-       internal_error ("trying to capture %qD after closure is complete", id);
+       internal_error ("trying to capture %qD in instantiation of "
+                       "generic lambda", id);
       finish_member_declaration (member);
     }
 
index f9b6f278afbb66f699923c550180ca1f251ff948..bb2a8774aa0846007f479ce73aae8c591f5fd376 100644 (file)
@@ -31712,7 +31712,7 @@ cp_parser_oacc_wait_list (cp_parser *parser, location_t clause_loc, tree list)
            {
              tree c = build_omp_clause (clause_loc, OMP_CLAUSE_WAIT);
 
-             mark_rvalue_use (targ);
+             targ = mark_rvalue_use (targ);
              OMP_CLAUSE_DECL (c) = targ;
              OMP_CLAUSE_CHAIN (c) = list;
              list = c;