diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2015-10-02 00:53:00 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2015-10-02 00:53:00 +0000 |
commit | d30ecc9c2bc9fc8373433302c9e351d545eed061 (patch) | |
tree | 8c640f85bd6e070ddea91ee5fcaa3000942fb513 /gcc | |
parent | 220ab6b433ee3a360c52032445676758991ed7d9 (diff) | |
download | gcc-d30ecc9c2bc9fc8373433302c9e351d545eed061.zip gcc-d30ecc9c2bc9fc8373433302c9e351d545eed061.tar.gz gcc-d30ecc9c2bc9fc8373433302c9e351d545eed061.tar.bz2 |
PR fortran.67802
2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran.67802
* decl.c (add_init_expr_to_sym): Numeric constant for character
length must be an INTEGER.
2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran.67802
* gfortran.dg/pr67802.f90: New test.
From-SVN: r228365
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr67802.f90 | 9 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9e6f2bd..2b6a4b6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran.67802 + * decl.c (add_init_expr_to_sym): Numeric constant for character + length must be an INTEGER. + +2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/66979 * io.c (gfc_resolve_filepos): Check for a UNIT number. Add a nearby missing 'return false'. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 39c1136..39e0805 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1439,7 +1439,12 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) /* Update initializer character length according symbol. */ else if (sym->ts.u.cl->length->expr_type == EXPR_CONSTANT) { - int len = mpz_get_si (sym->ts.u.cl->length->value.integer); + int len; + + if (!gfc_specification_expr (sym->ts.u.cl->length)) + return false; + + len = mpz_get_si (sym->ts.u.cl->length->value.integer); if (init->expr_type == EXPR_CONSTANT) gfc_set_constant_character_len (len, init, -1); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea748b9..f56366a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran.67802 + * gfortran.dg/pr67802.f90: New test. + +2015-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/66979 gfortran.dg/pr66979.f90: new test. diff --git a/gcc/testsuite/gfortran.dg/pr67802.f90 b/gcc/testsuite/gfortran.dg/pr67802.f90 new file mode 100644 index 0000000..6095016 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr67802.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/67802 +! Original code contribute by gerhard.steinmetz.fortran at t-online.de +program p + character(1.) :: c1 = ' ' ! { dg-error "must be of INTEGER" } + character(1d1) :: c2 = ' ' ! { dg-error "must be of INTEGER" } + character((0.,1.)) :: c3 = ' ' ! { dg-error "must be of INTEGER" } + character(.true.) :: c4 = ' ' ! { dg-error "must be of INTEGER" } +end program p |