Commit 1813c97a by Steven G. Kargl

re PR fortran/83939 (Constraint C1290 (elemental function cannot be allocatable) not enforced)

2018-03-11  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/83939
	* resolve.c (resolve_fl_procedure): Enforce F2018:C15100.

2018-03-11  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/83939
	* gfortran.dg/pr83939.f90

From-SVN: r258437
parent fbe1f017
2018-03-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/83939
* resolve.c (resolve_fl_procedure): Enforce F2018:C15100.
2018-03-11 Steven G. Kargl <kargls@gcc.gnu.org> 2018-03-11 Steven G. Kargl <kargls@gcc.gnu.org>
* check.c (gfc_check_kill): Check pid and sig are scalar. * check.c (gfc_check_kill): Check pid and sig are scalar.
......
...@@ -12451,6 +12451,19 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -12451,6 +12451,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) if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
{ {
gfc_formal_arglist *curr_arg; gfc_formal_arglist *curr_arg;
......
2018-03-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/83939
* gfortran.dg/pr83939.f90
2018-03-11 Thomas Koenig <tkoenig@gcc.gnu.org> 2018-03-11 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/66128 PR fortran/66128
......
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment