re PR fortran/24426 (gfortran ICE for valid derived type definition with default...
authorErik Edelmann <eedelman@gcc.gnu.org>
Sat, 22 Oct 2005 17:02:42 +0000 (17:02 +0000)
committerErik Edelmann <eedelman@gcc.gnu.org>
Sat, 22 Oct 2005 17:02:42 +0000 (17:02 +0000)
2005-10-22  Erik Edelmann  <eedelman@gcc.gnu.org>

        PR fortran/24426
        * decl.c (variable_decl): Don't assign default initializers to
                    pointers.

2005-10-22  Erik Edelmann  <eedelman@gcc.gnu.org>

        PR fortran/24426
        * gfortran.dg/der_pointer_4.f90: New.

From-SVN: r105792

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

index be1b909..51178f2 100644 (file)
@@ -1,3 +1,9 @@
+2005-10-22  Erik Edelmann  <eedelman@gcc.gnu.org>
+
+       PR fortran/24426
+       * decl.c (variable_decl): Don't assign default initializers to
+       pointers.
+
 2005-10-21  Jakub Jelinek  <jakub@redhat.com>
 
        * interface.c (compare_actual_formal): Issue error when attempting
index 21f1089..7a605d6 100644 (file)
@@ -1094,7 +1094,7 @@ variable_decl (int elem)
     t = add_init_expr_to_sym (name, &initializer, &var_locus);
   else
     {
-      if (current_ts.type == BT_DERIVED && !initializer)
+      if (current_ts.type == BT_DERIVED && !current_attr.pointer && !initializer)
        initializer = gfc_default_initializer (&current_ts);
       t = build_struct (name, cl, &initializer, &as);
     }
index ef1d49c..6dbf511 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-22  Erik Edelmann  <eedelman@gcc.gnu.org>
+
+       PR fortran/24426
+       * gfortran.dg/der_pointer_4.f90: New.
+
 2005-10-22  David Ayers  <d.ayers@inode.at>
 
        * obj-c++.dg/except-1.mm: Simplify.
diff --git a/gcc/testsuite/gfortran.dg/der_pointer_4.f90 b/gcc/testsuite/gfortran.dg/der_pointer_4.f90
new file mode 100644 (file)
index 0000000..6bc499d
--- /dev/null
@@ -0,0 +1,11 @@
+! {dg-do compile }
+! PR 24426
+! Pointer-components of derived type with initialized components
+module crash
+  implicit none
+  type foo
+    integer :: i = 0
+    type (foo), pointer :: next
+  end type foo
+  type (foo) :: bar
+end module crash