2009-12-10 Daniel Franke <franke.daniel@gmail.com>
authordfranke <dfranke@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Dec 2009 21:03:40 +0000 (21:03 +0000)
committerdfranke <dfranke@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Dec 2009 21:03:40 +0000 (21:03 +0000)
PR fortran/41369
* parse.c (match_deferred_characteristics): Removed check for empty
types in function return values.

2009-12-10  Daniel Franke  <franke.daniel@gmail.com>

PR fortran/41369
* gfortran.dg/func_derived_5.f90: New.

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

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

index 7280dd7..b1bec37 100644 (file)
@@ -1,5 +1,11 @@
 2009-12-10  Daniel Franke  <franke.daniel@gmail.com>
 
+       PR fortran/41369
+       * parse.c (match_deferred_characteristics): Removed check for empty
+       types in function return values.
+
+2009-12-10  Daniel Franke  <franke.daniel@gmail.com>
+
        PR fortran/34402
        * expr.c (check_alloc_comp_init): New.
        (check_init_expr): Verify that allocatable components
index c5d3548..98d684f 100644 (file)
@@ -2340,7 +2340,7 @@ match_deferred_characteristics (gfc_typespec * ts)
     {
       ts->kind = 0;
 
-      if (!ts->u.derived || !ts->u.derived->components)
+      if (!ts->u.derived)
        m = MATCH_ERROR;
     }
 
index fd0628f..2b1220b 100644 (file)
@@ -1,3 +1,8 @@
+2009-12-10  Daniel Franke  <franke.daniel@gmail.com>
+
+       PR fortran/41369
+       * gfortran.dg/func_derived_5.f90: New.
+
 2009-12-10  Jan Hubicka  <jh@suse.cz>
 
        PR middle-end/42110
diff --git a/gcc/testsuite/gfortran.dg/func_derived_5.f90 b/gcc/testsuite/gfortran.dg/func_derived_5.f90
new file mode 100644 (file)
index 0000000..afe5ec0
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do "compile" }
+! PR fortran/41369 - rejected empty type in function return values
+
+module m
+ type t
+ end type t
+end module
+
+type(t) function foo()
+  use m
+  foo = t()
+end function foo
+
+! { dg-final { cleanup-modules "m" } }