From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C5074385840F; Thu, 11 Nov 2021 22:53:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C5074385840F From: "anlauf at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/102368] Failure to compile program using the C_SIZEOF function in ISO_C_BINDING Date: Thu, 11 Nov 2021 22:53:22 +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: 11.2.0 X-Bugzilla-Keywords: 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 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Nov 2021 22:53:22 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102368 --- Comment #2 from anlauf at gcc dot gnu.org --- Testing the following patch: diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index ffa07b510cd..f325e5e4d5f 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -5272,13 +5272,18 @@ is_c_interoperable (gfc_expr *expr, const char **ms= g, bool c_loc, bool c_f_ptr) && !gfc_simplify_expr (expr->ts.u.cl->length, 0)) gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed"= ); - if (!c_loc && expr->ts.u.cl - && (!expr->ts.u.cl->length - || expr->ts.u.cl->length->expr_type !=3D EXPR_CONSTANT - || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) !=3D 0)) + if (!c_loc && expr->ts.u.cl) { - *msg =3D "Type shall have a character length of 1"; - return false; + bool len_ok =3D (expr->ts.u.cl->length + && expr->ts.u.cl->length->expr_type =3D=3D EXPR_CONS= TANT); + /* F2008: character variable of constant length is interoperable. = */ + if (len_ok && !(gfc_option.allow_std & GFC_STD_F2008)) + len_ok =3D mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != =3D 0; + if (!len_ok) + { + *msg =3D "Type shall have a character length of 1"; + return false; + } } }=