diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9a031f99d672da7eb3320d32f2ae2bfff928c3e0..b09d7e9d0d7b923bad264bcfeb8be93e7d2b7822 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -10,6 +10,11 @@
 	DECL_SOURCE_LOCATION and DECL_ABSTRACT_ORIGIN from var to result.
 	Set DECL_VALUE_EXPR on var.
 
+	PR debug/44367
+	* semantics.c (finalize_nrv): Don't copy DECL_ARTIFICIAL, DECL_IGNORED_P,
+	DECL_SOURCE_LOCATION and DECL_ABSTRACT_ORIGIN from var to result.
+	Set DECL_VALUE_EXPR on var.
+
 2010-06-02  Jason Merrill  <jason@redhat.com>
 
 	* error.c (dump_type): Improve typedef handling.
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 646610a94bf158c74e83d37091372a0a720a3269..71315b1f4fd40ad9a4d16b431026614db0c825e3 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -822,22 +822,26 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
 tree
 convert_to_void (tree expr, const char *implicit, tsubst_flags_t complain)
 {
-  tree exprv;
-
   if (expr == error_mark_node
       || TREE_TYPE (expr) == error_mark_node)
     return error_mark_node;
 
-  exprv = expr;
-  while (TREE_CODE (exprv) == COMPOUND_EXPR)
-    exprv = TREE_OPERAND (exprv, 1);
-  if (DECL_P (exprv) || handled_component_p (exprv))
-    /* Expr is not being 'used' here, otherwise we whould have
-       called mark_{rl}value_use use here, which would have in turn
-       called mark_exp_read.  Rather, we call mark_exp_read directly
-       to avoid some warnings when
-       -Wunused-but-set-{variable,parameter} is in effect.  */
-    mark_exp_read (exprv);
+  if (implicit == NULL)
+    mark_exp_read (expr);
+  else
+    {
+      tree exprv = expr;
+
+      while (TREE_CODE (exprv) == COMPOUND_EXPR)
+	exprv = TREE_OPERAND (exprv, 1);
+      if (DECL_P (exprv) || handled_component_p (exprv))
+	/* Expr is not being 'used' here, otherwise we whould have
+	   called mark_{rl}value_use use here, which would have in turn
+	   called mark_exp_read.  Rather, we call mark_exp_read directly
+	   to avoid some warnings when
+	   -Wunused-but-set-{variable,parameter} is in effect.  */
+	mark_exp_read (exprv);
+    }
 
   if (!TREE_TYPE (expr))
     return expr;