diff options
author | Tobias Burnus <burnus@net-b.de> | 2006-11-20 22:29:32 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2006-11-20 22:29:32 +0100 |
commit | 2a6dcee5c345f234b398f55be3dd575f0687341d (patch) | |
tree | f82930f7c37519031c5982002c76e6c35c67cd0a | |
parent | 02022f3a706d462cdb2da30e2d8cfd79901d78ab (diff) | |
download | gcc-2a6dcee5c345f234b398f55be3dd575f0687341d.zip gcc-2a6dcee5c345f234b398f55be3dd575f0687341d.tar.gz gcc-2a6dcee5c345f234b398f55be3dd575f0687341d.tar.bz2 |
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
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/import.f90 | 30 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/import2.f90 | 30 |
5 files changed, 65 insertions, 9 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a88071a..4a30d00 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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. diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 1b918b3..2c34072 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 079e73e..3393c8e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -12,6 +12,12 @@ 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> diff --git a/gcc/testsuite/gfortran.dg/import.f90 b/gcc/testsuite/gfortran.dg/import.f90 index 5d2b714..521f872 100644 --- a/gcc/testsuite/gfortran.dg/import.f90 +++ b/gcc/testsuite/gfortran.dg/import.f90 @@ -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" } } diff --git a/gcc/testsuite/gfortran.dg/import2.f90 b/gcc/testsuite/gfortran.dg/import2.f90 index 340bc51..e597cfc 100644 --- a/gcc/testsuite/gfortran.dg/import2.f90 +++ b/gcc/testsuite/gfortran.dg/import2.f90 @@ -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" } } |