From: Steven G. Kargl Date: Sat, 5 Oct 2019 15:42:25 +0000 (+0000) Subject: re PR fortran/47054 (Compilation error when cray pointers are declared in both host... X-Git-Tag: releases/gcc-9.3.0~572 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af7096d694a3a0790512ae9cfd6b48f0b382da6b;p=thirdparty%2Fgcc.git re PR fortran/47054 (Compilation error when cray pointers are declared in both host and internal subroutines) 2019-10-05 Steven G. Kargl PR fortran/47054 * decl.c (variable_decl): Do not search parent namespace for symbol. 2019-10-05 Steven G. Kargl PR fortran/47054 * gfortran.dg/pr47054_1.f90: New test * gfortran.dg/pr47054_2.f90: Ditto. From-SVN: r276628 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e77a9e10526a..4c9a1122285c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2019-10-05 Steven G. Kargl + + PR fortran/47054 + * decl.c (variable_decl): Do not search parent namespace for symbol. + 2019-10-04 Steven G. Kargl PR fortran/91942 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index b497b760bbad..9beb4eef4552 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -2649,7 +2649,7 @@ variable_decl (int elem) then we want to set the type & bail out. */ if (flag_cray_pointer && !gfc_comp_struct (gfc_current_state ())) { - gfc_find_symbol (name, gfc_current_ns, 1, &sym); + gfc_find_symbol (name, gfc_current_ns, 0, &sym); if (sym != NULL && sym->attr.cray_pointee) { m = MATCH_YES; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cd81e5305ac7..1d049689fc9a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,10 @@ -2019-10-04 Steven G. Kargl +2019-10-05 Steven G. Kargl + + PR fortran/47054 + * gfortran.dg/pr47054_1.f90: New test + * gfortran.dg/pr47054_2.f90: Ditto. + +2019-10-05 Steven G. Kargl PR fortran/91942 * gfortran.dg/pr91587.f90: Update dg-error regex. diff --git a/gcc/testsuite/gfortran.dg/pr47054_1.f90 b/gcc/testsuite/gfortran.dg/pr47054_1.f90 new file mode 100644 index 000000000000..3665edbd72b2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr47054_1.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fcray-pointer" } +! PR fortran/47054 +subroutine host_sub + implicit none + real xg + pointer (paxg, xg) + call internal_sub + contains + subroutine internal_sub + implicit none + real xg + pointer (paxg, xg) + end subroutine internal_sub +end subroutine host_sub diff --git a/gcc/testsuite/gfortran.dg/pr47054_2.f90 b/gcc/testsuite/gfortran.dg/pr47054_2.f90 new file mode 100644 index 000000000000..3b7c4aaf8158 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr47054_2.f90 @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-fcray-pointer" } +! PR fortran/47054 +! Code contributed by Deji Akingunola +subroutine host_sub(F_su,F_nk) + implicit none + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + call internal_sub(F_su,F_nk) + return +contains + + subroutine internal_sub(F_su,F_nk) + implicit none + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer k,k2 + + k2 = 0 + do k = 1, F_nk, 2 + k2 = k2+1 + F_su(k) = F_su(k) + 1.0 + enddo + return + end subroutine internal_sub +end subroutine host_sub