aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2024-01-05 23:38:56 +0100
committerHarald Anlauf <anlauf@gmx.de>2024-01-06 13:14:48 +0100
commit723bd722d616bbb427264930986f080d89207caa (patch)
tree3e979d8689fd14ca17cf724e6541099761771f46 /gcc/fortran
parentfefbd85b72729cec99a6e71e5c8b637948c8ed79 (diff)
downloadgcc-723bd722d616bbb427264930986f080d89207caa.zip
gcc-723bd722d616bbb427264930986f080d89207caa.tar.gz
gcc-723bd722d616bbb427264930986f080d89207caa.tar.bz2
Fortran: bogus warnings with REPEAT intrinsic and -Wconversion-extra [PR96724]
gcc/fortran/ChangeLog: PR fortran/96724 * iresolve.cc (gfc_resolve_repeat): Force conversion to gfc_charlen_int_kind before call to gfc_multiply. gcc/testsuite/ChangeLog: PR fortran/96724 * gfortran.dg/repeat_8.f90: New test. Co-authored-by: José Rui Faustino de Sousa <jrfsousa@gmail.com>
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/iresolve.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc
index 5bb0bbc..c961cdb 100644
--- a/gcc/fortran/iresolve.cc
+++ b/gcc/fortran/iresolve.cc
@@ -2363,7 +2363,15 @@ gfc_resolve_repeat (gfc_expr *f, gfc_expr *string,
}
if (tmp)
- f->ts.u.cl->length = gfc_multiply (tmp, gfc_copy_expr (ncopies));
+ {
+ /* Force-convert to gfc_charlen_int_kind before gfc_multiply. */
+ gfc_expr *e = gfc_copy_expr (ncopies);
+ gfc_typespec ts = tmp->ts;
+ ts.kind = gfc_charlen_int_kind;
+ gfc_convert_type_warn (e, &ts, 2, 0);
+ gfc_convert_type_warn (tmp, &ts, 2, 0);
+ f->ts.u.cl->length = gfc_multiply (tmp, e);
+ }
}