Blob Blame History Raw
2013-02-06  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/55978
	* runtime/in_pack_generic.c (internal_pack): Return if base_addr is
	NULL.

	* gfortran.dg/class_optional_2.f90: Uncomment some cases which work now.

--- libgfortran/runtime/in_pack_generic.c	(revision 195800)
+++ libgfortran/runtime/in_pack_generic.c	(working copy)
@@ -48,6 +48,9 @@ internal_pack (gfc_array_char * source)
   index_type size;
   index_type type_size;
 
+  if (source->base_addr == NULL)
+    return NULL;
+
   type_size = GFC_DTYPE_TYPE_SIZE(source);
   size = GFC_DESCRIPTOR_SIZE (source);
   switch (type_size)
--- gcc/testsuite/gfortran.dg/class_optional_2.f90	(revision 195800)
+++ gcc/testsuite/gfortran.dg/class_optional_2.f90	(working copy)
@@ -3,7 +3,7 @@
 !
 ! PR fortran/50981
 ! PR fortran/54618
-!
+! PR fortran/55978
 
   implicit none
   type t
@@ -547,7 +547,7 @@ contains
 !   call s2elem(z5) ! FIXME: Segfault
 !   call s2elem_t(x) ! FIXME: Conditional jump or move depends on uninitialised value
 !   call s2elem_t(y) ! FIXME: Conditional jump or move depends on uninitialised value
-!   call s2elem_t(z) ! FIXME: Conditional jump or move depends on uninitialised value
+   call s2elem_t(z)
 !   call s2elem_t(z2) ! FIXME: Segfault
 !   call s2elem_t(z3) ! FIXME: Segfault
 !   call s2elem_t(z4) ! FIXME: Segfault
@@ -590,7 +590,7 @@ contains
 !   call s2elem(z5) ! FIXME: Segfault
 !   call s2elem_t2(x) ! FIXME: Conditional jump or move depends on uninitialised value
 !   call s2elem_t2(y) ! FIXME: Conditional jump or move depends on uninitialised value
-!   call s2elem_t2(z) ! FIXME: Conditional jump or move depends on uninitialised value
+   call s2elem_t2(z)
 !   call s2elem_t2(z2) ! FIXME: Segfault
 !   call s2elem_t2(z3) ! FIXME: Segfault
 !   call s2elem_t2(z4) ! FIXME: Segfault