diff options
-rw-r--r-- | gcc/fortran/primary.c | 43 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr95373_1.f90 | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr95373_2.f90 | 2 |
3 files changed, 24 insertions, 25 deletions
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 67105cc..7c221c8 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1998,28 +1998,6 @@ is_inquiry_ref (const char *name, gfc_ref **ref) else return false; - switch (type) - { - case INQUIRY_RE: - case INQUIRY_IM: - if (!gfc_notify_std (GFC_STD_F2008, "RE or IM part_ref at %C")) - return false; - break; - - case INQUIRY_KIND: - if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C")) - return false; - break; - - case INQUIRY_LEN: - if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) - return false; - break; - - default: - gcc_unreachable (); - } - if (ref) { *ref = gfc_get_ref (); @@ -2267,6 +2245,27 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, { if (tmp) { + switch (tmp->u.i) + { + case INQUIRY_RE: + case INQUIRY_IM: + if (!gfc_notify_std (GFC_STD_F2008, + "RE or IM part_ref at %C")) + return MATCH_ERROR; + break; + + case INQUIRY_KIND: + if (!gfc_notify_std (GFC_STD_F2003, + "KIND part_ref at %C")) + return MATCH_ERROR; + break; + + case INQUIRY_LEN: + if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) + return MATCH_ERROR; + break; + } + if ((tmp->u.i == INQUIRY_RE || tmp->u.i == INQUIRY_IM) && primary->ts.type != BT_COMPLEX) { diff --git a/gcc/testsuite/gfortran.dg/pr95373_1.f90 b/gcc/testsuite/gfortran.dg/pr95373_1.f90 index f39b6a7..59a9e7a 100644 --- a/gcc/testsuite/gfortran.dg/pr95373_1.f90 +++ b/gcc/testsuite/gfortran.dg/pr95373_1.f90 @@ -4,12 +4,12 @@ subroutine s (x) complex, parameter :: z = 3 - real(z% kind) :: x ! { dg-error "nonderived-type variable" } + real(z% kind) :: x ! { dg-error "Fortran 2003: KIND part_ref" } type t real :: kind logical :: re end type t type(t) :: b print *, b% kind, b% re - print *, z% re ! { dg-error "nonderived-type variable" } + print *, z% re ! { dg-error "Fortran 2008: RE or IM part_ref" } end diff --git a/gcc/testsuite/gfortran.dg/pr95373_2.f90 b/gcc/testsuite/gfortran.dg/pr95373_2.f90 index 2a654b4..b0f3da0 100644 --- a/gcc/testsuite/gfortran.dg/pr95373_2.f90 +++ b/gcc/testsuite/gfortran.dg/pr95373_2.f90 @@ -11,5 +11,5 @@ subroutine s (x) end type t type(t) :: b print *, b% kind, b% re - print *, z% re ! { dg-error "nonderived-type variable" } + print *, z% re ! { dg-error "Fortran 2008: RE or IM part_ref" } end |