===================================================================
@@ -2061,7 +2061,7 @@ gfc_int2int (gfc_expr *src, int kind)
gfc_convert_mpz_to_signed (result->value.integer,
gfc_integer_kinds[k].bit_size);
- if (warn_conversion && kind < src->ts.kind)
+ if (warn_conversion && !src->do_not_warn && kind < src->ts.kind)
gfc_warning_now (OPT_Wconversion, "Conversion from %qs to %qs at %L",
gfc_typename (&src->ts), gfc_typename (&result->ts),
&src->where);
===================================================================
@@ -2168,6 +2168,9 @@ typedef struct gfc_expr
unsigned int do_not_resolve_again : 1;
+ /* Set this if no warning should be given somewhere in a lower level. */
+
+ unsigned int do_not_warn : 1;
/* If an expression comes from a Hollerith constant or compile-time
evaluation of a transfer statement, it may have a prescribed target-
memory representation, and these cannot always be backformed from
===================================================================
@@ -5028,6 +5028,8 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespe
if (ts->type == BT_UNKNOWN)
goto bad;
+ expr->do_not_warn = ! wflag;
+
/* NULL and zero size arrays get their type here, unless they already have a
typespec. */
if ((expr->expr_type == EXPR_NULL