--- gcc/tree-nrv.c.jj	2010-06-07 11:25:05.000000000 +0200
+++ gcc/tree-nrv.c	2010-07-05 18:37:44.000000000 +0200
@@ -259,6 +259,9 @@ tree_nrv (void)
 	}
     }
 
+  SET_DECL_VALUE_EXPR (found, result);
+  DECL_HAS_VALUE_EXPR_P (found) = 1;
+
   /* FOUND is no longer used.  Ensure it gets removed.  */
   var_ann (found)->used = 0;
   return 0;
--- gcc/testsuite/gcc.dg/guality/nrv-1.c.jj	2010-07-05 18:29:31.000000000 +0200
+++ gcc/testsuite/gcc.dg/guality/nrv-1.c	2010-07-05 18:36:48.000000000 +0200
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-g -fno-tree-sra" } */
+
+void abort (void);
+
+struct A
+{
+  int i[100];
+};
+
+struct A a1, a3;
+
+__attribute__((noinline)) struct A
+f ()
+{
+  struct A a2;
+  a2.i[0] = 42;
+  if (a3.i[0] != 0)
+    abort ();
+  a2.i[4] = 7;	/* { dg-final { gdb-test 20 "a2.i\[0\]" "42" } } */
+  return a2;
+}
+
+int
+main ()
+{
+  a1 = f ();
+  return 0;
+}
