This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch,fortran] Allow "IMPORT :: list-of-symbols" in interface bodys in modules (PR27546)


I forgot two things:
a)  ! { dg-final { cleanup-modules "modtest general" } }
b) To say: build and regression tested on x86_64-unknown-linux-gnu

Tobias

fortran/
2006-11-28  Tobias Burnus  <burnus@net-b.de>

    PR fortran/27546
    * trans-decl.f90 (gfc_create_module_variable): Allow imported symbols
      in interface bodys in modules.

testsuite/
2006-11-28  Tobias Burnus  <burnus@net-b.de>

    PR fortran/27546
    * gfortran.dg/import4.f90: New test for IMPORT in modules.

Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c	(Revision 119294)
+++ gcc/fortran/trans-decl.c	(Arbeitskopie)
@@ -2755,13 +2755,6 @@
   if (sym->attr.entry)
     return;
 
-  /* Only output symbols from this module.  */
-  if (sym->ns != module_namespace)
-    {
-      /* I don't think this should ever happen.  */
-      internal_error ("module symbol %s in wrong namespace", sym->name);
-    }
-
   /* Only output variables and array valued parameters.  */
   if (sym->attr.flavor != FL_VARIABLE
       && (sym->attr.flavor != FL_PARAMETER || sym->attr.dimension == 0))
Index: gcc/testsuite/gfortran.dg/import4.f90
===================================================================
--- gcc/testsuite/gfortran.dg/import4.f90	(Revision 0)
+++ gcc/testsuite/gfortran.dg/import4.f90	(Revision 0)
@@ -0,0 +1,99 @@
+! { dg-do run }
+! Test for import in modules
+! PR fortran/29601
+
+subroutine bar(r)
+  implicit none
+  integer(8) :: r
+  if(r /= 42) call abort()
+  r = 13
+end subroutine bar
+
+subroutine foo(a)
+  implicit none
+  type myT
+     sequence
+     character(len=3) :: c
+  end type myT
+  type(myT) :: a
+  if(a%c /= "xyz") call abort()
+  a%c = "abc"
+end subroutine
+
+subroutine new(a,b)
+  implicit none
+  type gType
+     sequence
+     integer(8) :: c
+  end type gType
+  real(8) :: a
+  type(gType) :: b
+  if(a /= 99.0 .or. b%c /= 11) call abort()
+  a = -123.0
+  b%c = -44
+end subroutine new
+
+module general
+  implicit none
+  integer,parameter :: ikind = 8
+  type gType
+     sequence
+     integer(ikind) :: c
+  end type gType
+end module general
+
+module modtest
+  use general
+  implicit none
+  type myT
+     sequence
+     character(len=3) :: c
+  end type myT
+  integer, parameter :: dp = 8
+  interface
+     subroutine bar(x)
+       import :: dp
+       integer(dp) :: x
+     end subroutine bar
+     subroutine foo(c)
+      import :: myT
+       type(myT) :: c
+     end subroutine foo
+     subroutine new(x,y)
+      import :: ikind,gType
+      real(ikind) :: x
+      type(gType) :: y
+     end subroutine new
+  end interface
+  contains
+  subroutine test
+    integer(dp) :: y
+    y = 42
+    call bar(y)
+    if(y /= 13) call abort()
+  end subroutine test
+  subroutine test2()
+    type(myT) :: z
+    z%c = "xyz"
+    call foo(z)
+    if(z%c /= "abc") call abort()
+  end subroutine test2
+end module modtest
+
+program all
+  use modtest
+  implicit none
+  call test()
+  call test2()
+  call test3()
+contains
+  subroutine test3()
+    real(ikind) :: r
+    type(gType) :: t
+    r   = 99.0
+    t%c = 11
+    call new(r,t)
+    if(r /= -123.0 .or. t%c /= -44) call abort()
+  end subroutine test3
+end program all
+! { dg-final { cleanup-modules "modtest general" } }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]