From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id EB5453858D39; Mon, 6 Mar 2023 22:13:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EB5453858D39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678140808; bh=SQHR50RfvK3TqX5Uf1I0yYYzgtt5ZSGXZ/uRMfvqxuQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hB6UUH3MhPEl81c7hS38BMX5P4AiCx5bxTsdy0JC7KGG5zR3jVadboK2OEaLWplNt MtTYAcJO8WbEsz28clUcUZt/DLp+hSVUiGzVSqMqV6F0K8r2IIsd8uVr4cZelOOQ5e Xf3EXU2f2WRQeWrHeHGJphuRXooYC1Bx1ald7O+c= From: "anlauf at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/58331] [OOP] Bogus rank checking with explicit-/assumed-size arrays and CLASS Date: Mon, 06 Mar 2023 22:13:28 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 4.9.0 X-Bugzilla-Keywords: rejects-valid, wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: anlauf at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D58331 --- Comment #5 from anlauf at gcc dot gnu.org --- The previous patch would accept invalid code, as it would miss assumed-shap= e. Fixed by the additional: @@ -2650,10 +2669,14 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, if (symbol_rank (formal) =3D=3D actual->rank || symbol_rank (formal) =3D= =3D -1) return true; - rank_check =3D where !=3D NULL && !is_elemental && formal->as - && (formal->as->type =3D=3D AS_ASSUMED_SHAPE - || formal->as->type =3D=3D AS_DEFERRED) - && actual->expr_type !=3D EXPR_NULL; + gfc_array_spec *formal_as; + formal_as =3D formal->ts.type =3D=3D BT_CLASS ? CLASS_DATA (formal)->as + : formal->as; + + rank_check =3D where !=3D NULL && !is_elemental && formal_as + && (formal_as->type =3D=3D AS_ASSUMED_SHAPE + || formal_as->type =3D=3D AS_DEFERRED) + && actual->expr_type !=3D EXPR_NULL; /* Skip rank checks for NO_ARG_CHECK. */ if (formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))=