aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/primary.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/recursive_parameter_1.f9011
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5b1ed77..20894cb 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-10 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/39334
+ * primary.c (match_kind_param): Return MATCH_NO if the symbol
+ has no value.
+
2008-07-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/40629
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 4a84aed..8013cc8 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -57,6 +57,9 @@ match_kind_param (int *kind)
if (sym->attr.flavor != FL_PARAMETER)
return MATCH_NO;
+ if (sym->value == NULL)
+ return MATCH_NO;
+
p = gfc_extract_int (sym->value, kind);
if (p != NULL)
return MATCH_NO;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 333544c..48711da 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-10 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/39334
+ * gfortran.dg/recursive_parameter_1.f90: New test.
+
2009-07-09 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/c_kind_tests_2.f03: clean-up leftover module(s).
diff --git a/gcc/testsuite/gfortran.dg/recursive_parameter_1.f90 b/gcc/testsuite/gfortran.dg/recursive_parameter_1.f90
new file mode 100644
index 0000000..8a13d25
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/recursive_parameter_1.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! Tests the fix for PR39334 in which the recursive parameter declaration
+! caused a sgfault.
+!
+! Reported by James van Buskirk on comp.lang.fortran
+!
+program recursive_parameter
+ implicit none
+ integer, parameter :: dp = kind(1.0_dp) ! { dg-error "Missing kind-parameter" }
+ write(*,*) dp ! { dg-error "has no IMPLICIT type" }
+end program recursive_parameter