aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2015-10-02 00:53:00 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2015-10-02 00:53:00 +0000
commitd30ecc9c2bc9fc8373433302c9e351d545eed061 (patch)
tree8c640f85bd6e070ddea91ee5fcaa3000942fb513 /gcc
parent220ab6b433ee3a360c52032445676758991ed7d9 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/decl.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr67802.f909
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