aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.cc
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2022-12-10 22:05:15 +0100
committerHarald Anlauf <anlauf@gmx.de>2022-12-10 22:05:15 +0100
commitae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1 (patch)
tree3354cf55ca8d797df65f0ad8ca1d0316d3b72e8a /gcc/fortran/simplify.cc
parent7676235f690e624b7ed41a22b22ce8ccfac1492f (diff)
downloadgcc-ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1.zip
gcc-ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1.tar.gz
gcc-ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1.tar.bz2
Fortran: reject bad SIZE argument while simplifying ISHFTC [PR106911]
gcc/fortran/ChangeLog: PR fortran/106911 * simplify.cc (gfc_simplify_ishftc): If the SIZE argument is known to be outside the allowed range, terminate simplification. gcc/testsuite/ChangeLog: PR fortran/106911 * gfortran.dg/pr106911.f90: New test.
Diffstat (limited to 'gcc/fortran/simplify.cc')
-rw-r--r--gcc/fortran/simplify.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index aff9a1b..3d3aaba 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -3955,6 +3955,9 @@ gfc_simplify_ishftc (gfc_expr *e, gfc_expr *s, gfc_expr *sz)
return NULL;
gfc_extract_int (sz, &ssize);
+
+ if (ssize > isize || ssize <= 0)
+ return &gfc_bad_expr;
}
else
ssize = isize;