diff options
author | Harald Anlauf <anlauf@gmx.de> | 2023-03-11 15:37:37 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2023-03-11 15:48:32 +0100 |
commit | 2cf5f485e0351bb1faf46196a99e524688f3966e (patch) | |
tree | 304530d15d7a1d824b8b7478de49c2d17d8772c7 | |
parent | c62df15d283f035d5b1644f74493db2933f2a8cb (diff) | |
download | gcc-2cf5f485e0351bb1faf46196a99e524688f3966e.zip gcc-2cf5f485e0351bb1faf46196a99e524688f3966e.tar.gz gcc-2cf5f485e0351bb1faf46196a99e524688f3966e.tar.bz2 |
Fortran: fix bounds check for copying of class expressions [PR106945]
In the bounds check for copying of class expressions, the number of elements
determined from a descriptor, returned as type gfc_array_index_type (i.e. a
signed type), should be converted to the type of the passed element count,
which is of type size_type_node (i.e. unsigned), for use in comparisons.
gcc/fortran/ChangeLog:
PR fortran/106945
* trans-expr.cc (gfc_copy_class_to_class): Convert element counts in
bounds check to common type for comparison.
gcc/testsuite/ChangeLog:
PR fortran/106945
* gfortran.dg/pr106945.f90: New test.
-rw-r--r-- | gcc/fortran/trans-expr.cc | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr106945.f90 | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 045c8b0..dcd39f4 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -1531,6 +1531,7 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems, bool unlimited) name = (const char *)(DECL_NAME (to)->identifier.id.str); from_len = gfc_conv_descriptor_size (from_data, 1); + from_len = fold_convert (TREE_TYPE (orig_nelems), from_len); tmp = fold_build2_loc (input_location, NE_EXPR, logical_type_node, from_len, orig_nelems); msg = xasprintf ("Array bound mismatch for dimension %d " diff --git a/gcc/testsuite/gfortran.dg/pr106945.f90 b/gcc/testsuite/gfortran.dg/pr106945.f90 new file mode 100644 index 0000000..e760ca7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr106945.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single -fcheck=bounds -ftrapv" } +! PR fortran/106945 +! Contributed by G. Steinmetz + +module m + implicit none + type t + class(*), allocatable :: a[:] + end type +end |