diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c487767e9611cbe8a325518834e7d6c9314e1b36..910de0d0f324fc6508d1822982ad254e2ed07a78 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2006-10-14 Paul Thomas <pault@gcc.gnu.org>
+
+	PR fortran/29371
+	* trans-expr.c (gfc_trans_pointer_assignment): Add the expression
+	for the assignment of null to the data field to se->pre, rather
+	than block.	
+
 2006-10-14  Kazu Hirata  <kazu@codesourcery.com>
 
 	* intrinsic.texi: Fix typos.
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 875092fbea197fb653013528261fa340fb00d8c7..190a11560daecb452e186b7a701ef9290c7664bd 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -3149,7 +3149,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2)
 	{
 	case EXPR_NULL:
 	  /* Just set the data pointer to null.  */
-	  gfc_conv_descriptor_data_set (&block, lse.expr, null_pointer_node);
+	  gfc_conv_descriptor_data_set (&lse.pre, lse.expr, null_pointer_node);
 	  break;
 
 	case EXPR_VARIABLE:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dbdd789bdf2479d40e29031abaa8ae6239e8af3c..075f175dc46bbc64c8ecdcb14afdfa5eee8a307c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-14 Paul Thomas <pault@gcc.gnu.org>
+
+	PR fortran/29371
+	* gfortran.dg/nullify_3.f90: New test.
+
 2006-10-14  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
 	* gcc.dg/pthread-init-2.c (dg-options): Define _POSIX_C_SOURCE=199506L
diff --git a/gcc/testsuite/gfortran.dg/nullify_3.f90 b/gcc/testsuite/gfortran.dg/nullify_3.f90
new file mode 100644
index 0000000000000000000000000000000000000000..7d202a25893ef20f7cb90c7a7ee3585691fd1a13
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/nullify_3.f90
@@ -0,0 +1,26 @@
+! { dg-do run }
+! { dg-options "-O0 -fbounds-check" }
+! Tests patch for PR29371, in which the null pointer
+! assignment would cause a segfault with the bounds
+! check on.
+!
+! Contributed by Tobias Burnus <tobias.burnus@physik.fu-berlin.de>
+!
+program test
+  implicit none
+  type projector_t
+    real,   pointer :: ket(:, :), bra(:, :)
+  end type projector_t
+
+  type(projector_t),pointer, dimension(:) :: p
+  integer :: stat,i
+  allocate(p(2),stat=stat)
+  do i = 1, 2
+        nullify(p(i)%bra)
+        nullify(p(i)%ket)
+  end do
+  do i = 1, 2
+        if (associated (p(i)%bra)) call abort ()
+        if (associated (p(i)%ket)) call abort ()
+  end do
+end program