From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id C49E33858D38; Thu, 26 Jan 2023 18:35:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C49E33858D38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1674758123; bh=vz1z2KBMz4luy6E7DYvsmYniESZtjejckEKR8nQrb/4=; h=From:To:Subject:Date:From; b=qLgnI5oQulMqD9j/4ZlbjYJMPZRL8O8ieS4Lsxlg+6vzbx6TfodjuGREU1daZbP8R 03U1D4BbqrkFElSCAWp9BpcFbLogoRDgJR9DnuqHpPk+FNiVNDHkvwk9XXPYrfP/ew 1d+oYku8/sysiIGFjXsLiN6DpyFpSJNzp4+DtkqM= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Harald Anlauf To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-5400] Fortran: fix ICE in check_host_association [PR108544] X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/master X-Git-Oldrev: a82ce9c8d155ecda2d1c647d5c588f29e21ef4a3 X-Git-Newrev: c8e07c7951421e718bcafbe5924e75c9aa133af9 Message-Id: <20230126183523.C49E33858D38@sourceware.org> Date: Thu, 26 Jan 2023 18:35:23 +0000 (GMT) List-Id: https://gcc.gnu.org/g:c8e07c7951421e718bcafbe5924e75c9aa133af9 commit r13-5400-gc8e07c7951421e718bcafbe5924e75c9aa133af9 Author: Harald Anlauf Date: Wed Jan 25 22:47:26 2023 +0100 Fortran: fix ICE in check_host_association [PR108544] gcc/fortran/ChangeLog: PR fortran/108544 * resolve.cc (check_host_association): Extend host association check so that it is not restricted to functions. Also prevent NULL pointer dereference. gcc/testsuite/ChangeLog: PR fortran/108544 * gfortran.dg/pr108544.f90: New test. * gfortran.dg/pr96102b.f90: New test. Diff: --- gcc/fortran/resolve.cc | 4 +++- gcc/testsuite/gfortran.dg/pr108544.f90 | 11 +++++++++++ gcc/testsuite/gfortran.dg/pr96102b.f90 | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 94213cd3cd4..9e2edf7be71 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -6087,7 +6087,6 @@ check_host_association (gfc_expr *e) gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym); if (sym && old_sym != sym - && sym->ts.type == old_sym->ts.type && sym->attr.flavor == FL_PROCEDURE && sym->attr.contained) { @@ -6132,6 +6131,9 @@ check_host_association (gfc_expr *e) return false; } + if (ref == NULL) + return false; + gcc_assert (ref->type == REF_ARRAY); /* Grab the start expressions from the array ref and diff --git a/gcc/testsuite/gfortran.dg/pr108544.f90 b/gcc/testsuite/gfortran.dg/pr108544.f90 new file mode 100644 index 00000000000..783cb7aaf7b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108544.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/108544 - ICE in check_host_association +! Contributed by G.Steinmetz + +module m +contains + subroutine s + select type (s => 1) ! { dg-error "Selector shall be polymorphic" } + end select + end +end diff --git a/gcc/testsuite/gfortran.dg/pr96102b.f90 b/gcc/testsuite/gfortran.dg/pr96102b.f90 new file mode 100644 index 00000000000..82147da3893 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr96102b.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR fortran/108544 - host association +! Variation of testcase pr96102.f90 using subroutines instead of functions + +module m + type mytype + integer :: i + end type + type(mytype) :: d = mytype (42) ! { dg-error "is host associated" } + integer :: n = 2 ! { dg-error "is host associated" } +contains + subroutine s + if ( n /= 0 ) stop 1 ! { dg-error "internal procedure of the same name" } + if ( d%i /= 0 ) stop 2 ! { dg-error "internal procedure of the same name" } + contains + subroutine n() + end + subroutine d() + end + end +end + +! { dg-prune-output "Operands of comparison operator" }