OSDN Git Service

fortran/
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Nov 2006 21:29:32 +0000 (21:29 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Nov 2006 21:29:32 +0000 (21:29 +0000)
2006-11-17  Tobias Burnus  <burnus@net-b.de>

    PR fortran/27546
    * primary.c (gfc_match_rvalue): Added IMPORT support.

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

    PR fortran/27546
    * gfortran.dg/import.f90: Extended test.
    * gfortran.dg/import2.f90: Extended test.

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

gcc/fortran/ChangeLog
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/import.f90
gcc/testsuite/gfortran.dg/import2.f90

index a88071a..4a30d00 100644 (file)
@@ -1,5 +1,10 @@
 2006-11-20  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/27546
+       * primary.c (gfc_match_rvalue): Added IMPORT support.
+
+2006-11-20  Tobias Burnus  <burnus@net-b.de>
+
        * symbol.c (check_conflict): Add conflict between VOLATILE
          attribute and program name.
 
index 1b918b3..2c34072 100644 (file)
@@ -1917,7 +1917,8 @@ gfc_match_rvalue (gfc_expr ** result)
   if (m != MATCH_YES)
     return m;
 
-  if (gfc_find_state (COMP_INTERFACE) == SUCCESS)
+  if (gfc_find_state (COMP_INTERFACE) == SUCCESS
+      && !gfc_current_ns->has_import_set)
     i = gfc_get_sym_tree (name, NULL, &symtree);
   else
     i = gfc_get_ha_sym_tree (name, &symtree);
index 079e73e..3393c8e 100644 (file)
 
 2006-11-20  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/27546
+       * gfortran.dg/import.f90: Extended test.
+       * gfortran.dg/import2.f90: Extended test.
+
+2006-11-20  Tobias Burnus  <burnus@net-b.de>
+
        * gfortran.dg/volatile3.f90: Add conflict test.
 
 2006-11-20  Bernhard Fischer  <aldot@gcc.gnu.org>
index 5d2b714..521f872 100644 (file)
@@ -13,18 +13,36 @@ subroutine test(x)
 end subroutine test
 
 
-subroutine bar(x)
+subroutine bar(x,y)
   type myType
     sequence
     integer :: i
   end type myType
   type(myType) :: x
+  integer(8) :: y
+  if(y /= 8) call abort()
   if(x%i /= 2) call abort()
   x%i = 5
+  y = 42
 end subroutine bar
 
+module testmod
+  implicit none
+  integer, parameter :: kind = 8
+  type modType
+    real :: rv
+  end type modType
+  interface
+    subroutine other(x,y)
+       import
+       real(kind)    :: x
+       type(modType) :: y
+    end subroutine
+  end interface
+end module testmod
 
 program foo
+  integer, parameter :: dp = 8
   type myType
     sequence
     integer :: i
@@ -34,9 +52,10 @@ program foo
     integer :: i
   end type myType3
   interface
-    subroutine bar(x)
+    subroutine bar(x,y)
       import
       type(myType) :: x
+      integer(dp)     :: y
     end subroutine bar
     subroutine test(x)
       import :: myType3
@@ -47,10 +66,13 @@ program foo
 
   type(myType) :: y
   type(myType3) :: z
+  integer(8) :: i8
   y%i = 2
-  call bar(y)
-  if(y%i /= 5) call abort()
+  i8 = 8
+  call bar(y,i8)
+  if(y%i /= 5 .or. i8/= 42) call abort()
   z%i = 7
   call test(z)
   if(z%i /= 1) call abort()
 end program foo
+! { dg-final { cleanup-modules "testmod" } }
index 340bc51..e597cfc 100644 (file)
@@ -15,18 +15,36 @@ subroutine test(x)
 end subroutine test
 
 
-subroutine bar(x)
+subroutine bar(x,y)
   type myType
     sequence
     integer :: i
   end type myType
   type(myType) :: x
+  integer(8) :: y
+  if(y /= 8) call abort()
   if(x%i /= 2) call abort()
   x%i = 5
+  y   = 42
 end subroutine bar
 
+module testmod
+  implicit none
+  integer, parameter :: kind = 8
+  type modType
+    real :: rv
+  end type modType
+  interface
+    subroutine other(x,y)
+      import ! { dg-error "Fortran 2003: IMPORT statement" }
+      type(modType) :: y ! { dg-error "not been declared within the interface" }
+      real(kind)    :: x ! { dg-error "has not been declared" }
+    end subroutine
+  end interface
+end module testmod
 
 program foo
+  integer, parameter :: dp = 8
   type myType
     sequence
     integer :: i
@@ -36,9 +54,10 @@ program foo
     integer :: i
   end type myType3
   interface
-    subroutine bar(x)
+    subroutine bar(x,y)
       import ! { dg-error "Fortran 2003: IMPORT statement" }
       type(myType) :: x ! { dg-error "not been declared within the interface" }
+      integer(dp)  :: y ! { dg-error "has not been declared" }
     end subroutine bar
     subroutine test(x)
       import :: myType3 ! { dg-error "Fortran 2003: IMPORT statement" }
@@ -49,10 +68,13 @@ program foo
 
   type(myType) :: y
   type(myType3) :: z
+  integer(dp) :: i8
   y%i = 2
-  call bar(y) ! { dg-error "Type/rank mismatch in argument" }
-  if(y%i /= 5) call abort()
+  i8 = 8
+  call bar(y,i8) ! { dg-error "Type/rank mismatch in argument" }
+  if(y%i /= 5 .or. i8/= 42) call abort()
   z%i = 7
   call test(z) ! { dg-error "Type/rank mismatch in argument" }
   if(z%i /= 1) call abort()
 end program foo
+! { dg-final { cleanup-modules "testmod" } }