re PR fortran/50401 (SIGSEGV in resolve_transfer)
authorJanus Weil <janus@gcc.gnu.org>
Thu, 15 Sep 2011 17:48:27 +0000 (19:48 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Thu, 15 Sep 2011 17:48:27 +0000 (19:48 +0200)
2011-09-15  Janus Weil  <janus@gcc.gnu.org>

PR fortran/50401
* resolve.c (resolve_transfer): Check if component 'ref' is defined.

PR fortran/50403
* symbol.c (gfc_use_derived): Check if argument 'sym' is defined.

2011-09-15  Janus Weil  <janus@gcc.gnu.org>

PR fortran/50401
PR fortran/50403
* gfortran.dg/function_types_3.f90: New.

From-SVN: r178889

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

index eeb462f7fc2dc49feb88a83baedf738e590180e4..a8e02732dc4e933301d00265d2483f735c8fb535 100644 (file)
@@ -1,3 +1,11 @@
+2011-09-15  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/50401
+       * resolve.c (resolve_transfer): Check if component 'ref' is defined.
+
+       PR fortran/50403
+       * symbol.c (gfc_use_derived): Check if argument 'sym' is defined.
+
 2011-09-14  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/34547
index 9aab8365e4589a456981e50be67106a0e3e61fb2..62750af850b867d490ff87ca1e9673dc44b989bd 100644 (file)
@@ -8222,7 +8222,7 @@ resolve_transfer (gfc_code *code)
        }
     }
 
-  if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE
+  if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
       && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
     {
       gfc_error ("Data transfer element at %L cannot be a full reference to "
index b2f0f2b6b7826b387c7278f3338b18a08a9e91be..e2f13b8f9a916969228befcd4fa9184b0095e62c 100644 (file)
@@ -1945,6 +1945,8 @@ gfc_use_derived (gfc_symbol *sym)
   gfc_symtree *st;
   int i;
 
+  if (!sym) return NULL;
+
   if (sym->components != NULL || sym->attr.zero_comp)
     return sym;               /* Already defined.  */
 
index 86cdde08bac9a1e260aa4ba83ad66196e86f95db..0accd60a78ff1653007fb6414e21bc595cca31a2 100644 (file)
@@ -1,3 +1,9 @@
+2011-09-15  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/50401
+       PR fortran/50403
+       * gfortran.dg/function_types_3.f90: New.
+
 2011-09-15  Jason Merrill  <jason@redhat.com>
 
        PR c++/50365
diff --git a/gcc/testsuite/gfortran.dg/function_types_3.f90 b/gcc/testsuite/gfortran.dg/function_types_3.f90
new file mode 100644 (file)
index 0000000..8d00f5f
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do compile }
+!
+! Contributed by Vittorio Zecca <zeccav@gmail.com>
+!
+! PR 50401: SIGSEGV in resolve_transfer
+
+  interface 
+    function f()      ! { dg-error "must be a dummy argument" }
+      dimension f(*)
+    end function
+  end interface
+  print *,f()
+end
+
+! PR 50403: SIGSEGV in gfc_use_derived
+
+type(f) function f()  ! { dg-error "conflicts with DERIVED attribute|is not accessible" }
+  f=110               ! { dg-error "Unclassifiable statement" }
+end