2005-09-18 Erik Edelmann <erik.edelmann@iki.fi>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Sep 2005 05:50:04 +0000 (05:50 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Sep 2005 05:50:04 +0000 (05:50 +0000)
PR fortran/15975
* resolve.c (resolve_symbol): Don't assign default
initializer to pointers.

2005-09-18  Erik Edelmann  <erik.edelmann@iki.fi>

PR fortran/15975
* gfortran.dg/der_pointer_2.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104389 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/der_pointer_2.f90 [new file with mode: 0644]

index ca4a80d..0863e27 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-18  Erik Edelmann  <erik.edelmann@iki.fi>
+
+       PR fortran/15975
+       * resolve.c (resolve_symbol): Don't assign default
+       initializer to pointers.
+
 2005-09-18  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/16861
index f941333..e342a1e 100644 (file)
@@ -4328,7 +4328,8 @@ resolve_symbol (gfc_symbol * sym)
        }
 
       /* Assign default initializer.  */
-      if (sym->ts.type == BT_DERIVED && !(sym->value || whynot))
+      if (sym->ts.type == BT_DERIVED && !(sym->value || whynot)
+          && !sym->attr.pointer)
        sym->value = gfc_default_initializer (&sym->ts);
       break;
 
index c60cb55..4424bd8 100644 (file)
@@ -1,3 +1,8 @@
+2005-09-18  Erik Edelmann  <erik.edelmann@iki.fi>
+
+       PR fortran/15975
+       * gfortran.dg/der_pointer_2.f90: New test.
+
 2005-09-18  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/16861
diff --git a/gcc/testsuite/gfortran.dg/der_pointer_2.f90 b/gcc/testsuite/gfortran.dg/der_pointer_2.f90
new file mode 100644 (file)
index 0000000..3749fc2
--- /dev/null
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! PR 15975, PR 16606
+! Pointers to derived types with initialized components
+!
+! Contributed by Erik Edelmann <erik.edelmann@iki.fi>
+!
+SUBROUTINE N
+  TYPE T
+    INTEGER :: I = 99
+  END TYPE T
+  TYPE(T), POINTER :: P
+  TYPE(T), TARGET  :: Q
+  P => Q
+  if (P%I.ne.99) call abort ()
+END SUBROUTINE N
+
+program test_pr15975
+  call n ()
+end program test_pr15975
+