From: Tobias Burnus Date: Mon, 20 Nov 2006 21:29:32 +0000 (+0100) Subject: re PR fortran/27546 (IMPORT is broken) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2a6dcee5c345f234b398f55be3dd575f0687341d;p=gcc.git re PR fortran/27546 (IMPORT is broken) fortran/ 2006-11-17 Tobias Burnus PR fortran/27546 * primary.c (gfc_match_rvalue): Added IMPORT support. testsuite/ 2006-11-17 Tobias Burnus PR fortran/27546 * gfortran.dg/import.f90: Extended test. * gfortran.dg/import2.f90: Extended test. From-SVN: r119028 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a88071a4289..4a30d00f9b7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2006-11-20 Tobias Burnus + + PR fortran/27546 + * primary.c (gfc_match_rvalue): Added IMPORT support. + 2006-11-20 Tobias Burnus * symbol.c (check_conflict): Add conflict between VOLATILE diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 1b918b3202f..2c340724fcb 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 079e73efe67..3393c8ed9b1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -10,6 +10,12 @@ PR tree-opt/25500 * gcc.dg/tree-ssa/sra-4.c: New testcase. +2006-11-20 Tobias Burnus + + PR fortran/27546 + * gfortran.dg/import.f90: Extended test. + * gfortran.dg/import2.f90: Extended test. + 2006-11-20 Tobias Burnus * gfortran.dg/volatile3.f90: Add conflict test. diff --git a/gcc/testsuite/gfortran.dg/import.f90 b/gcc/testsuite/gfortran.dg/import.f90 index 5d2b7149ae8..521f87222be 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 340bc519335..e597cfc30b9 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" } }