* lambda.c (maybe_add_lambda_conv_op): Fix null object argument.
authorJason Merrill <jason@redhat.com>
Fri, 8 Jul 2016 21:31:59 +0000 (17:31 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 8 Jul 2016 21:31:59 +0000 (17:31 -0400)
From-SVN: r238180

gcc/cp/ChangeLog
gcc/cp/lambda.c

index 0d6ce94a4db98fda4d185f8281ee0e76f268fd03..d6f9914b2c103f4daeacf3b9447ddff7a662bf32 100644 (file)
@@ -1,5 +1,7 @@
 2016-07-08  Jason Merrill  <jason@redhat.com>
 
+       * lambda.c (maybe_add_lambda_conv_op): Fix null object argument.
+
        P0145R2: Refining Expression Order for C++.
        * cp-gimplify.c (lvalue_has_side_effects): New.
        (cp_gimplify_expr): Implement assignment ordering.
index 85ad9f895d48743e123f8629c2c5a1138f205097..3822882accad7b32b1dded529ebb4c0ef9ffe290 100644 (file)
@@ -904,6 +904,8 @@ maybe_add_lambda_conv_op (tree type)
   tree optype = TREE_TYPE (callop);
   tree fn_result = TREE_TYPE (optype);
 
+  tree thisarg = build_nop (TREE_TYPE (DECL_ARGUMENTS (callop)),
+                           null_pointer_node);
   if (generic_lambda_p)
     {
       /* Prepare the dependent member call for the static member function
@@ -911,7 +913,8 @@ maybe_add_lambda_conv_op (tree type)
         return expression for a deduced return call op to allow for simple
         implementation of the conversion operator.  */
 
-      tree instance = build_nop (type, null_pointer_node);
+      tree instance = cp_build_indirect_ref (thisarg, RO_NULL,
+                                            tf_warning_or_error);
       tree objfn = build_min (COMPONENT_REF, NULL_TREE,
                              instance, DECL_NAME (callop), NULL_TREE);
       int nargs = list_length (DECL_ARGUMENTS (callop)) - 1;
@@ -923,9 +926,7 @@ maybe_add_lambda_conv_op (tree type)
   else
     {
       direct_argvec = make_tree_vector ();
-      direct_argvec->quick_push (build1 (NOP_EXPR,
-                                        TREE_TYPE (DECL_ARGUMENTS (callop)),
-                                        null_pointer_node));
+      direct_argvec->quick_push (thisarg);
     }
 
   /* Copy CALLOP's argument list (as per 'copy_list') as FN_ARGS in order to