Commit 2a6dcee5 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/27546 (IMPORT is broken)

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
parent 02022f3a
2006-11-20 Tobias Burnus <burnus@net-b.de> 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 * symbol.c (check_conflict): Add conflict between VOLATILE
attribute and program name. attribute and program name.
......
...@@ -1917,7 +1917,8 @@ gfc_match_rvalue (gfc_expr ** result) ...@@ -1917,7 +1917,8 @@ gfc_match_rvalue (gfc_expr ** result)
if (m != MATCH_YES) if (m != MATCH_YES)
return m; 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); i = gfc_get_sym_tree (name, NULL, &symtree);
else else
i = gfc_get_ha_sym_tree (name, &symtree); i = gfc_get_ha_sym_tree (name, &symtree);
......
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
2006-11-20 Tobias Burnus <burnus@net-b.de> 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. * gfortran.dg/volatile3.f90: Add conflict test.
2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org> 2006-11-20 Bernhard Fischer <aldot@gcc.gnu.org>
...@@ -13,18 +13,36 @@ subroutine test(x) ...@@ -13,18 +13,36 @@ subroutine test(x)
end subroutine test end subroutine test
subroutine bar(x) subroutine bar(x,y)
type myType type myType
sequence sequence
integer :: i integer :: i
end type myType end type myType
type(myType) :: x type(myType) :: x
integer(8) :: y
if(y /= 8) call abort()
if(x%i /= 2) call abort() if(x%i /= 2) call abort()
x%i = 5 x%i = 5
y = 42
end subroutine bar 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 program foo
integer, parameter :: dp = 8
type myType type myType
sequence sequence
integer :: i integer :: i
...@@ -34,9 +52,10 @@ program foo ...@@ -34,9 +52,10 @@ program foo
integer :: i integer :: i
end type myType3 end type myType3
interface interface
subroutine bar(x) subroutine bar(x,y)
import import
type(myType) :: x type(myType) :: x
integer(dp) :: y
end subroutine bar end subroutine bar
subroutine test(x) subroutine test(x)
import :: myType3 import :: myType3
...@@ -47,10 +66,13 @@ program foo ...@@ -47,10 +66,13 @@ program foo
type(myType) :: y type(myType) :: y
type(myType3) :: z type(myType3) :: z
integer(8) :: i8
y%i = 2 y%i = 2
call bar(y) i8 = 8
if(y%i /= 5) call abort() call bar(y,i8)
if(y%i /= 5 .or. i8/= 42) call abort()
z%i = 7 z%i = 7
call test(z) call test(z)
if(z%i /= 1) call abort() if(z%i /= 1) call abort()
end program foo end program foo
! { dg-final { cleanup-modules "testmod" } }
...@@ -15,18 +15,36 @@ subroutine test(x) ...@@ -15,18 +15,36 @@ subroutine test(x)
end subroutine test end subroutine test
subroutine bar(x) subroutine bar(x,y)
type myType type myType
sequence sequence
integer :: i integer :: i
end type myType end type myType
type(myType) :: x type(myType) :: x
integer(8) :: y
if(y /= 8) call abort()
if(x%i /= 2) call abort() if(x%i /= 2) call abort()
x%i = 5 x%i = 5
y = 42
end subroutine bar 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 program foo
integer, parameter :: dp = 8
type myType type myType
sequence sequence
integer :: i integer :: i
...@@ -36,9 +54,10 @@ program foo ...@@ -36,9 +54,10 @@ program foo
integer :: i integer :: i
end type myType3 end type myType3
interface interface
subroutine bar(x) subroutine bar(x,y)
import ! { dg-error "Fortran 2003: IMPORT statement" } import ! { dg-error "Fortran 2003: IMPORT statement" }
type(myType) :: x ! { dg-error "not been declared within the interface" } type(myType) :: x ! { dg-error "not been declared within the interface" }
integer(dp) :: y ! { dg-error "has not been declared" }
end subroutine bar end subroutine bar
subroutine test(x) subroutine test(x)
import :: myType3 ! { dg-error "Fortran 2003: IMPORT statement" } import :: myType3 ! { dg-error "Fortran 2003: IMPORT statement" }
...@@ -49,10 +68,13 @@ program foo ...@@ -49,10 +68,13 @@ program foo
type(myType) :: y type(myType) :: y
type(myType3) :: z type(myType3) :: z
integer(dp) :: i8
y%i = 2 y%i = 2
call bar(y) ! { dg-error "Type/rank mismatch in argument" } i8 = 8
if(y%i /= 5) call abort() call bar(y,i8) ! { dg-error "Type/rank mismatch in argument" }
if(y%i /= 5 .or. i8/= 42) call abort()
z%i = 7 z%i = 7
call test(z) ! { dg-error "Type/rank mismatch in argument" } call test(z) ! { dg-error "Type/rank mismatch in argument" }
if(z%i /= 1) call abort() if(z%i /= 1) call abort()
end program foo end program foo
! { dg-final { cleanup-modules "testmod" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment