From: Steven G. Kargl Date: Thu, 20 Jun 2019 23:50:54 +0000 (+0000) Subject: backport: re PR fortran/77632 ([F08] Pointer initialisation does not quite work with... X-Git-Tag: releases/gcc-9.2.0~221 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57cdb4a67058a4d1ce1ed97c56dc5f6381706974;p=thirdparty%2Fgcc.git backport: re PR fortran/77632 ([F08] Pointer initialisation does not quite work with arrays) 2019-06-20 Steven G. Kargl Backport from mainline 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 Backport from mainline PR fortran/77632 * gfortran.dg/pr77632_1.f90: New test. From-SVN: r272532 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a7e08d4dd535..02b0d7a4568f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + 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 Backport from mainline diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index a005bd7962b4..cf09420cfbe4 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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5536a17de0aa..8504dddb31e7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + PR fortran/77632 + * gfortran.dg/pr77632_1.f90: New test. + 2019-06-20 Steven G. Kargl Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/pr77632_1.f90 b/gcc/testsuite/gfortran.dg/pr77632_1.f90 new file mode 100644 index 000000000000..13fed5991a61 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr77632_1.f90 @@ -0,0 +1,7 @@ +! { dg-do run } +program foo + implicit none + real, target :: a + real, pointer :: b => a + if (associated(b, a) .eqv. .false.) stop 1 +end program foo