From 851b57408b2d08f734eec70a988be5e5da6fbfee Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Mon, 12 Mar 2018 18:26:28 +0000 Subject: [PATCH] re PR fortran/83939 (Constraint C1290 (elemental function cannot be allocatable) not enforced) 2018-03-12 Steven G. Kargl PR fortran/83939 * resolve.c (resolve_fl_procedure): Enforce F2018:C15100. 2018-03-12 Steven G. Kargl PR fortran/83939 * gfortran.dg/pr83939.f90 From-SVN: r258457 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/resolve.c | 13 +++++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr83939.f90 | 12 ++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr83939.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 840b0b0c21da..433d66b4ee16 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2018-03-12 Steven G. Kargl + + PR fortran/83939 + * resolve.c (resolve_fl_procedure): Enforce F2018:C15100. + 2018-03-10 Steven G. Kargl PR fortran/84734 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index d2d1b5835356..99ee31efeeb2 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11958,6 +11958,19 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) } } + /* F2018, C15100: "The result of an elemental function shall be scalar, + and shall not have the POINTER or ALLOCATABLE attribute." The scalar + pointer is tested and caught elsewhere. */ + if (sym->attr.elemental && sym->result + && (sym->result->attr.allocatable || sym->result->attr.pointer)) + { + gfc_error ("Function result variable %qs at %L of elemental " + "function %qs shall not have an ALLOCATABLE or POINTER " + "attribute", sym->result->name, + &sym->result->declared_at, sym->name); + return false; + } + if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1) { gfc_formal_arglist *curr_arg; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index baaf4088e38a..d29d0a61c4e4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-12 Steven G. Kargl + + PR fortran/83939 + * gfortran.dg/pr83939.f90 + 2018-03-10 Steven G. Kargl PR fortran/84734 diff --git a/gcc/testsuite/gfortran.dg/pr83939.f90 b/gcc/testsuite/gfortran.dg/pr83939.f90 new file mode 100644 index 000000000000..dfeaac71630c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr83939.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +elemental function f() result(s) ! { dg-error "shall not have an ALLOCATABLE or POINTER" } + allocatable s + allocate(s) + s = 3.5 +end function + +elemental function g() result(s) ! { dg-error "shall not have an ALLOCATABLE or POINTER" } + pointer s + allocate(s) + s = 3.5 +end function -- 2.47.2