From: Steven G. Kargl Date: Mon, 12 Mar 2018 18:26:28 +0000 (+0000) Subject: re PR fortran/83939 (Constraint C1290 (elemental function cannot be allocatable)... X-Git-Tag: releases/gcc-6.5.0~447 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=851b57408b2d08f734eec70a988be5e5da6fbfee;p=thirdparty%2Fgcc.git 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 --- 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