re PR fortran/27546 (IMPORT is broken)
authorTobias Burnus <burnus@net-b.de>
Mon, 20 Nov 2006 21:29:32 +0000 (22:29 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 20 Nov 2006 21:29:32 +0000 (22:29 +0100)
fortran/
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.

From-SVN: r119028

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

index a88071a4289f610c50996df85b4dca4d409cbd60..4a30d00f9b7fc6c8f8a4dbabeab04fb4bea48805 100644 (file)
@@ -1,3 +1,8 @@
+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
index 1b918b3202fe387df3b6a70950334ebd8c45b0f8..2c340724fcb8db42fcdaf8b9503279779238db27 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 079e73efe67d1c3f7a6b5fa59e91d2509a2f8b35..3393c8ed9b187934b5c0591e4376bbb620b5c80c 100644 (file)
        PR tree-opt/25500
        * gcc.dg/tree-ssa/sra-4.c: New testcase.
 
+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.
index 5d2b7149ae803cfe50df1322ac4900d0e72ead32..521f87222bef2ecf51f458b8d9213d9ca7e9f85d 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 340bc5193351223e9c459463a9cc11afd8794880..e597cfc30b97adad2342e326b3828aef818d611c 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" } }