On Fri, Jan 10, 2025 at 05:19:34PM +0000, Paul Richard Thomas wrote: > > As of today, Gerhard Steinmetz has no fewer than 33 regressions to his name > out of a total of 54 for fortran and libgfortran. It's time that some of > these bugs are swatted, I think :-) >
This patch fixes PR71844. As the error message indicates, the source-expr in 'allocate(x, source=null())' cannot be null(). diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index dab0c3af601..538917fe56a 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -8965,6 +8965,13 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec) gfc_component *c; bool t; + /* source-expr in either SOURCE= or MODE= cannot be NULL(). */ + if (code->expr3 && code->expr3->expr_type == EXPR_NULL) + { + gfc_error ("Source-expr at %L cannot be NULL()", &code->expr3->where); + goto failure; + } + /* Mark the utmost array component as being in allocate to allow DIMEN_STAR checking of coarrays. */ for (ref = e->ref; ref; ref = ref->next) diff --git a/gcc/testsuite/gfortran.dg/pr71844.f90 b/gcc/testsuite/gfortran.dg/pr71844.f90 new file mode 100644 index 00000000000..af990f32fbb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr71844.f90 @@ -0,0 +1,10 @@ +! +! { dg-do compile } +! +program p + class(*), allocatable :: x, y + character(:), allocatable :: z + allocate (x, source=null()) ! { dg-error "cannot be NULL" } + allocate (y, mold=null()) ! { dg-error "cannot be NULL" } + allocate (character(*) :: z) ! { dg-error "Incompatible allocate-object" } +end -- Steve