From 6cbeab134f048d65ed615ed587f6ae0b01d1c336 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 17 Mar 2025 22:34:19 +0100 Subject: Fortran: check type-spec in ALLOCATE of dummy with assumed length [PR119338] PR fortran/119338 gcc/fortran/ChangeLog: * resolve.cc (resolve_allocate_expr): Check F2003:C626: Type-spec in ALLOCATE of an assumed-length character dummy argument shall be an asterisk. gcc/testsuite/ChangeLog: * gfortran.dg/deferred_character_18.f90: Adjust testcase. * gfortran.dg/allocate_assumed_charlen_5.f90: New test. --- gcc/fortran/resolve.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'gcc/fortran') diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index d64edff..ddd9827 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -8987,6 +8987,22 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec) goto failure; } + /* F2003:C626 (R623) A type-param-value in a type-spec shall be an asterisk + if and only if each allocate-object is a dummy argument for which the + corresponding type parameter is assumed. */ + if (code->ext.alloc.ts.type == BT_CHARACTER + && code->ext.alloc.ts.u.cl->length != NULL + && e->ts.type == BT_CHARACTER && !e->ts.deferred + && e->ts.u.cl->length == NULL + && e->symtree->n.sym->attr.dummy) + { + gfc_error ("The type parameter in ALLOCATE statement with type-spec " + "shall be an asterisk as allocate object %qs at %L is a " + "dummy argument with assumed type parameter", + sym->name, &e->where); + goto failure; + } + /* Check F08:C632. */ if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred && !UNLIMITED_POLY (e)) -- cgit v1.1