[Bug fortran/88298] Bogus conversion warning for CSHIFT with -fno-range-check -m64
anlauf at gmx dot de
gcc-bugzilla@gcc.gnu.org
Mon Dec 3 21:39:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88298
--- Comment #1 from Harald Anlauf <anlauf at gmx dot de> ---
The problem appears here:
Breakpoint 1, gfc_resolve_cshift (f=0x2431950, array=0x23bc1f0,
shift=0x23bc880, dim=0x23bcce0) at ../../trunk/gcc/fortran/iresolve.c:836
836 gfc_resolve_dim_arg (dim);
(gdb) p dim->ts.kind
$1 = 4
(gdb) n
838 if (dim->ts.kind != shift->ts.kind)
(gdb) p dim->ts.kind
$2 = 8
(gdb) l
833 }
834 else
835 {
836 gfc_resolve_dim_arg (dim);
837 /* Convert dim to shift's kind to reduce variations. */
838 if (dim->ts.kind != shift->ts.kind)
839 gfc_convert_type_warn (dim, &shift->ts, 2, 0);
840 }
841 }
842
Function gfc_resolve_dim_arg converts the kind and is the cause of the
warning.
The above code points to this rather old commit:
r130391 | jvdelisle | 2007-11-24 01:25:01 +0100 (Sat, 24 Nov 2007) | 20 lines
However, the real point probably is that gfc_index_integer_kind = 8 for -m64,
and gfc_resolve_dim_arg does the conversion from default kind = 4 to the
gfc_index_integer_kind:
if (dim->ts.kind != gfc_index_integer_kind)
{
gfc_typespec ts;
gfc_clear_ts (&ts);
ts.type = BT_INTEGER;
ts.kind = gfc_index_integer_kind;
gfc_convert_type_warn (dim, &ts, 2, 0);
}
Deep down the -f(no-)range-check apparently controls whether we get
the warning.
Wouldn't it be better/safer to convert dim/shift to their largest kind
involved?
More information about the Gcc-bugs
mailing list