diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4d18f170e5733bbacce09443cde5349fc100d60c..cc86721d5419a0084ef290e40909ca47d5dff0ac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-08  Alexandre Oliva  <aoliva@redhat.com>
+
+	PR debug/41229
+	PR debug/41291
+	PR debug/41300
+	* tree-ssa.c (execute_update_addresses_taken): Update debug insns.
+
 2009-09-08  Alexandre Oliva  <aoliva@redhat.com>
 
 	* tree-ssa-loop-ivopts.c (get_phi_with_result): Remove.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 66b454d6e8defc6f5479e05db3a9527551dcc41c..e9d64461b80c64b3fcfb6b9c08fe910e4b450992 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-08  Alexandre Oliva  <aoliva@redhat.com>
+
+	PR debug/41229
+	PR debug/41291
+	PR debug/41300
+	* gfortran.dg/pr41229.f90: New.
+
 2009-09-08  Alexandre Oliva  <aoliva@redhat.com>
 
 	PR debug/41232
diff --git a/gcc/testsuite/gfortran.dg/pr41229.f90 b/gcc/testsuite/gfortran.dg/pr41229.f90
new file mode 100644
index 0000000000000000000000000000000000000000..9f6e566fc9b48f835e06cc8c698cecb0405dd31c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr41229.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! { dg-options "-O2 -g" }
+SUBROUTINE cp_fm_triangular_multiply()
+    INTEGER, PARAMETER :: dp=KIND(0.0D0)
+    REAL(dp), ALLOCATABLE, DIMENSION(:)      :: tau, work
+    REAL(KIND=dp), DIMENSION(:, :), POINTER  :: a
+    ndim = SIZE(a,2)
+    ALLOCATE(tau(ndim),STAT=istat)
+    ALLOCATE(work(2*ndim),STAT=istat)
+END SUBROUTINE
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index b5b6afe15e6c8a3e4601cc031ef19a68b714d982..9015d19c189e2108a8831d09ed8fad6a82bea33a 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -1963,7 +1963,8 @@ execute_update_addresses_taken (bool do_optimize)
 	    {
 	      gimple stmt = gsi_stmt (gsi);
 
-	      if (gimple_references_memory_p (stmt))
+	      if (gimple_references_memory_p (stmt)
+		  || is_gimple_debug (stmt))
 		update_stmt (stmt);
 	    }