diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-01-10 21:31:43 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2018-01-10 21:31:43 +0000 |
commit | 266404a8d62b99ab6dd6579bbd33fca32e91ca3b (patch) | |
tree | 8f3b4f3181519c3e8ef37d4d7edb1d51c4d2c52f /gcc | |
parent | 88324fd006d3ba0ed4808cc0b3569b8c6af29624 (diff) | |
download | gcc-266404a8d62b99ab6dd6579bbd33fca32e91ca3b.zip gcc-266404a8d62b99ab6dd6579bbd33fca32e91ca3b.tar.gz gcc-266404a8d62b99ab6dd6579bbd33fca32e91ca3b.tar.bz2 |
[multiple changes]
2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/83093
* resolve.c (resolve_charlen): Check the type of cl->length
after resolution.
2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/83093
* gfortran.dg/allocate_with_typespec_7.f90: New test.
From-SVN: r256455
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 | 14 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 05ea28e..6bad1a6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/83093 + * resolve.c (resolve_charlen): Check the type of cl->length + after resolution. + 2018-01-10 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/83740 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 57155cd..1950483 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11664,10 +11664,17 @@ resolve_charlen (gfc_charlen *cl) specification_expr = saved_specification_expr; return false; } + + /* cl->length has been resolved. It should have an integer type. */ + if (cl->length->ts.type != BT_INTEGER) + { + gfc_error ("Scalar INTEGER expression expected at %L", + &cl->length->where); + return false; + } } else { - if (!resolve_index_expr (cl->length)) { specification_expr = saved_specification_expr; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5fdb4701..825224d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/83093 + * gfortran.dg/allocate_with_typespec_7.f90: New test. + 2018-01-10 Peter Bergner <bergner@vnet.ibm.com> PR target/83399 diff --git a/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 b/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 new file mode 100644 index 0000000..feb6c8c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! PR Fortran/83093 +! Contributed by Gerhard Steinmetz <gscfq at t-online dot de> +program p + integer, parameter :: n(2) = [1,2] + real :: x = 2 + character(:), allocatable :: z, zz, zzz + character(:), allocatable :: y, yy + allocate (character(a) :: z) ! { dg-error "Scalar INTEGER expression" } + allocate (character(x) :: zz) ! { dg-error "Scalar INTEGER expression" } + allocate (character((1.0)) :: z) ! { dg-error "Scalar INTEGER expression" } + allocate (character(y) :: y) ! { dg-error "Scalar INTEGER expression" } + allocate (character(n(1:2)) :: y)! { dg-error "Scalar INTEGER expression" } +end |