https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102368

--- 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 **msg,
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 != EXPR_CONSTANT
-           || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0))
+    if (!c_loc && expr->ts.u.cl)
       {
-       *msg = "Type shall have a character length of 1";
-       return false;
+       bool len_ok = (expr->ts.u.cl->length
+                      && expr->ts.u.cl->length->expr_type == EXPR_CONSTANT);
+       /* F2008: character variable of constant length is interoperable.  */
+       if (len_ok && !(gfc_option.allow_std & GFC_STD_F2008))
+         len_ok = mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0;
+       if (!len_ok)
+         {
+           *msg = "Type shall have a character length of 1";
+           return false;
+         }
       }
     }

Reply via email to