]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/fortran/resolve.c
PR 78534, 83704 Large character lengths
[thirdparty/gcc.git] / gcc / fortran / resolve.c
index 1ecfe05ed797ec7415012ee1c3d9d5c1fb2f8f8d..a2b892aa65a135c50c324cf73565d919b3e5c23f 100644 (file)
@@ -10117,8 +10117,6 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
   bool rval = false;
   gfc_expr *lhs;
   gfc_expr *rhs;
-  int llen = 0;
-  int rlen = 0;
   int n;
   gfc_ref *ref;
   symbol_attribute attr;
@@ -10200,10 +10198,11 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
   if (lhs->ts.type == BT_CHARACTER
        && warn_character_truncation)
     {
+      HOST_WIDE_INT llen = 0, rlen = 0;
       if (lhs->ts.u.cl != NULL
            && lhs->ts.u.cl->length != NULL
            && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
-       llen = mpz_get_si (lhs->ts.u.cl->length->value.integer);
+       llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
 
       if (rhs->expr_type == EXPR_CONSTANT)
        rlen = rhs->value.character.length;
@@ -10211,13 +10210,13 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
       else if (rhs->ts.u.cl != NULL
                 && rhs->ts.u.cl->length != NULL
                 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
-       rlen = mpz_get_si (rhs->ts.u.cl->length->value.integer);
+       rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
 
       if (rlen && llen && rlen > llen)
        gfc_warning_now (OPT_Wcharacter_truncation,
                         "CHARACTER expression will be truncated "
-                        "in assignment (%d/%d) at %L",
-                        llen, rlen, &code->loc);
+                        "in assignment (%ld/%ld) at %L",
+                        (long) llen, (long) rlen, &code->loc);
     }
 
   /* Ensure that a vector index expression for the lvalue is evaluated