aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-11-29 18:41:37 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2007-11-29 18:41:37 +0100
commit10650fbb88871139f242597b1f081041868c43f6 (patch)
treeb42760de48aec223a457ec3e2ab06cc9c9e3f01d
parent5ac74d254221fa92b4e55f03a46329599e8f31d1 (diff)
downloadgcc-10650fbb88871139f242597b1f081041868c43f6.zip
gcc-10650fbb88871139f242597b1f081041868c43f6.tar.gz
gcc-10650fbb88871139f242597b1f081041868c43f6.tar.bz2
re PR fortran/34248 (ICE on assumed length character function)
2007-11-29 Tobias Burnus <burnus@net-b.de> PR fortran/34248 * trans-decl.c (generate_dependency_declarations): Check for NULL pointers before accessing the string length. 2007-11-29 Tobias Burnus <burnus@net-b.de> PR fortran/34248 * gfortran.dg/result_in_spec_3.f90: New. From-SVN: r130517
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-decl.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/result_in_spec_3.f9015
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a176c27..8f185f7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2007-11-29 Tobias Burnus <burnus@net-b.de>
+ PR fortran/34248
+ * trans-decl.c (generate_dependency_declarations): Check
+ for NULL pointers before accessing the string length.
+
+2007-11-29 Tobias Burnus <burnus@net-b.de>
+
PR fortran/34262
* intrinsic.c (gfc_get_intrinsic_sub_symbol): Add comment.
(gfc_intrinsic_sub_interface): Copy elemental state if needed.
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 84e7226..e48de1f 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -2924,7 +2924,9 @@ generate_dependency_declarations (gfc_symbol *sym)
int i;
if (sym->ts.type == BT_CHARACTER
- && sym->ts.cl->length->expr_type != EXPR_CONSTANT)
+ && sym->ts.cl
+ && sym->ts.cl->length
+ && sym->ts.cl->length->expr_type != EXPR_CONSTANT)
generate_expr_decls (sym, sym->ts.cl->length);
if (sym->as && sym->as->rank)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e062abc..889d220 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2007-11-29 Tobias Burnus <burnus@net-b.de>
+ PR fortran/34248
+ * gfortran.dg/result_in_spec_3.f90: New.
+
+2007-11-29 Tobias Burnus <burnus@net-b.de>
+
PR fortran/34262
* gfortran.dg/mvbits_3.f90: New.
diff --git a/gcc/testsuite/gfortran.dg/result_in_spec_3.f90 b/gcc/testsuite/gfortran.dg/result_in_spec_3.f90
new file mode 100644
index 0000000..1cfb864
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/result_in_spec_3.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+!
+! PR fortran/34248
+!
+! There was an ICE for assumed-length functions
+! if RESULT(...) was used and no value assigned
+! to the result variable.
+!
+character(*) FUNCTION test() RESULT(ctab)
+ ctab = "Hello"
+END function test
+
+FUNCTION test2() RESULT(res)
+ character(*) :: res
+END function test2