Skip to content
Snippets Groups Projects
Commit 89230999 authored by Harald Anlauf's avatar Harald Anlauf
Browse files

Fortran: reject NULL as source-expr in ALLOCATE with SOURCE= or MOLD= [PR71884]

	PR fortran/71884

gcc/fortran/ChangeLog:

	* resolve.cc (resolve_allocate_expr): Reject intrinsic NULL as
	source-expr.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr71884.f90: New test.
parent 2619413a
No related branches found
No related tags found
No related merge requests found
...@@ -9433,6 +9433,18 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec) ...@@ -9433,6 +9433,18 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
/* Some checks for the SOURCE tag. */ /* Some checks for the SOURCE tag. */
if (code->expr3) if (code->expr3)
{ {
/* Check F03:C632: "The source-expr shall be a scalar or have the same
rank as allocate-object". This would require the MOLD argument to
NULL() as source-expr for subsequent checking. However, even the
resulting disassociated pointer or unallocated array has no shape that
could be used for SOURCE= or MOLD=. */
if (code->expr3->expr_type == EXPR_NULL)
{
gfc_error ("The intrinsic NULL cannot be used as source-expr at %L",
&code->expr3->where);
goto failure;
}
/* Check F03:C631. */ /* Check F03:C631. */
if (!gfc_type_compatible (&e->ts, &code->expr3->ts)) if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
{ {
......
! { dg-do compile }
! PR fortran/71884 - reject NULL as source-expr in ALLOCATE with SOURCE= or MOLD=
!
! Contributed by G.Steinmetz
program p
real, allocatable :: a
real, pointer :: b
class(*), allocatable :: x
class(*), pointer :: y
allocate (x, source=null()) ! { dg-error "NULL cannot be used as source-expr" }
allocate (y, source=null(b)) ! { dg-error "NULL cannot be used as source-expr" }
allocate (x, mold=null(b)) ! { dg-error "NULL cannot be used as source-expr" }
allocate (y, mold=null()) ! { dg-error "NULL cannot be used as source-expr" }
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment