From 1b034a958d4255f1cf57463655b9c74ec1e329bb Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Sun, 14 Jul 2019 22:52:58 +0000 Subject: [PATCH] re PR fortran/87233 (Constraint C1279 still followed after f2008 standard revision (?)) 2019-07-14 Jerry DeLisle PR fortran/87233 * expr.c (check_restricted): Relax constraint C1279 which was removed from F2008 and above. * gfortran.dg/initialization_14.f90: Modify to now pass by removing two dg-error commands. Added comments. * gfortran.dg/initialization_30.f90: New test that includes the two tests removed above with the 'dg-options -std=f95'. From-SVN: r273484 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/expr.c | 10 +++++---- gcc/testsuite/ChangeLog | 8 +++++++ .../gfortran.dg/initialization_14.f90 | 6 +++--- .../gfortran.dg/initialization_30.f90 | 21 +++++++++++++++++++ 5 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/initialization_30.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0376f00ed53..c92c85a3a76 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-07-14 Jerry DeLisle + + PR fortran/87233 + * expr.c (check_restricted): Relax constraint C1279 which was + removed from F2008 and above. + 2019-07-07 Paul Thomas PR fortran/91077 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index ec9e3288b48..a1643707662 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -3305,12 +3305,14 @@ check_restricted (gfc_expr *e) restricted expression in an elemental procedure, it will have already been simplified away once we get here. Therefore we don't need to jump through hoops to distinguish valid from - invalid cases. */ - if (sym->attr.dummy && sym->ns == gfc_current_ns + invalid cases. Allowed in F2008 and F2018. */ + if (gfc_notification_std (GFC_STD_F2008) + && sym->attr.dummy && sym->ns == gfc_current_ns && sym->ns->proc_name && sym->ns->proc_name->attr.elemental) { - gfc_error ("Dummy argument %qs not allowed in expression at %L", - sym->name, &e->where); + gfc_error_now ("Dummy argument %qs not " + "allowed in expression at %L", + sym->name, &e->where); break; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b22a8c78046..ae16c7da408 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-07-14 Jerry DeLisle + + PR fortran/87233 + * gfortran.dg/initialization_14.f90: Modify to now pass by + removing two dg-error commands. Added comments. + * gfortran.dg/initialization_30.f90: New test that includes the + two tests removed above with the 'dg-options -std=f95'. + 2019-07-14 Uroš Bizjak * gcc.dg/tree-ssa/pr84512.c (dg-final): Remove XFAIL on alpha*-*-*. diff --git a/gcc/testsuite/gfortran.dg/initialization_14.f90 b/gcc/testsuite/gfortran.dg/initialization_14.f90 index 4d5b6856cf0..aa1437719ac 100644 --- a/gcc/testsuite/gfortran.dg/initialization_14.f90 +++ b/gcc/testsuite/gfortran.dg/initialization_14.f90 @@ -3,18 +3,18 @@ ! Dummy arguments are disallowed in initialization expressions in ! elemental functions except as arguments to the intrinsic functions ! BIT_SIZE, KIND, LEN, or to the numeric inquiry functions listed -! in 13.11.8 +! in 13.11.8 F95, likewise not allowed in F2003, now allowed in F2008. MODULE TT INTEGER M CONTAINS ELEMENTAL REAL FUNCTION two(N) INTEGER, INTENT(IN) :: N - INTEGER, DIMENSION(N) :: scr ! { dg-error "Dummy argument 'n' not allowed in expression" } + INTEGER, DIMENSION(N) :: scr ! Now valid under F2008 END FUNCTION ELEMENTAL REAL FUNCTION twopointfive(N) INTEGER, INTENT(IN) :: N - INTEGER, DIMENSION(MAX(N,2)) :: scr ! { dg-error "Dummy argument 'n' not allowed in expression" } + INTEGER, DIMENSION(MAX(N,2)) :: scr ! Now valid under F2008 end FUNCTION twopointfive REAL FUNCTION three(N) diff --git a/gcc/testsuite/gfortran.dg/initialization_30.f90 b/gcc/testsuite/gfortran.dg/initialization_30.f90 new file mode 100644 index 00000000000..ff8436bc7c9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/initialization_30.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-std=f95" } +! PR 20851 +! Dummy arguments are disallowed in initialization expressions in +! elemental functions except as arguments to the intrinsic functions +! BIT_SIZE, KIND, LEN, or to the numeric inquiry functions listed +! in 13.11.8 +MODULE TT +INTEGER M +CONTAINS + ELEMENTAL REAL FUNCTION two(N) + INTEGER, INTENT(IN) :: N + INTEGER, DIMENSION(N) :: scr ! { dg-error "Dummy argument 'n' not allowed in expression" } + END FUNCTION + + ELEMENTAL REAL FUNCTION twopointfive(N) + INTEGER, INTENT(IN) :: N + INTEGER, DIMENSION(MAX(N,2)) :: scr ! { dg-error "Dummy argument 'n' not allowed in expression" } + end FUNCTION twopointfive +END MODULE +END -- 2.30.2