From 2cf4aa79c811c5c658c0a66bcb70278c8fbe89ce Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Thu, 20 Jun 2019 22:16:29 +0000 Subject: re PR fortran/77632 ([F08] Pointer initialisation does not quite work with arrays) 2019-06-20 Steven G. Kargl PR fortran/77632 * /decl.c (variable_decl): Mark a variable that is a target in pointer initialization when in PROGRAM, MODULE, or SUBMODULE scope with an implicit save. 2019-06-20 Steven G. Kargl PR fortran/77632 * gfortran.dg/pr77632_1.f90: New test. From-SVN: r272526 --- gcc/fortran/decl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'gcc/fortran/decl.c') diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 7fcb60a..f5517f0 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -2779,6 +2779,16 @@ variable_decl (int elem) m = match_pointer_init (&initializer, 0); if (m != MATCH_YES) goto cleanup; + + /* The target of a pointer initialization must have the SAVE + attribute. A variable in PROGRAM, MODULE, or SUBMODULE scope + is implicit SAVEd. Explicitly, set the SAVE_IMPLICIT value. */ + if (initializer->expr_type == EXPR_VARIABLE + && initializer->symtree->n.sym->attr.save == SAVE_NONE + && (gfc_current_state () == COMP_PROGRAM + || gfc_current_state () == COMP_MODULE + || gfc_current_state () == COMP_SUBMODULE)) + initializer->symtree->n.sym->attr.save = SAVE_IMPLICIT; } else if (gfc_match_char ('=') == MATCH_YES) { -- cgit v1.1