aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/data.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f9010
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6c2a442..daafc06 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2009-04-26 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/39893
+ fortran/data.c (gfc_assign_data_value): If the lvalue is an
+ assumed character length entity in a data statement, then
+ return FAILURE to prevent segmentation fault.
+
2009-04-26 Jakub Jelinek <jakub@redhat.com>
* trans-decl.c: Include pointer-set.h.
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index 09dde15..5829c7f 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -416,7 +416,11 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
}
if (ref || last_ts->type == BT_CHARACTER)
- expr = create_character_intializer (init, last_ts, ref, rvalue);
+ {
+ if (lvalue->ts.cl->length == NULL && !(ref && ref->u.ss.length != NULL))
+ return FAILURE;
+ expr = create_character_intializer (init, last_ts, ref, rvalue);
+ }
else
{
/* Overwriting an existing initializer is non-standard but usually only
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c9f21cf..2c080fa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-26 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/39893
+ * gfortran.dg/assumed_charlen_dummy.f90: New Test.
+
2009-04-26 Jakub Jelinek <jakub@redhat.com>
PR inline-asm/39543
diff --git a/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90 b/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90
new file mode 100644
index 0000000..04f0b9f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! Test the fix for PR fortran/39893.
+! Original testcase provided by Deji Akingunola.
+! Reduced testcase provided by Dominique d'Humieres.
+!
+ SUBROUTINE XAUTOGET()
+ CHARACTER*(*) DICBA ! { dg-error "Entity with assumed character" }
+ DATA DICBA /"CLIP" /
+ RETURN
+ END