aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2006-11-15 11:02:21 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2006-11-15 11:02:21 +0100
commit8c894ae273073a4a45cd37be4ee2b06c35c40dd6 (patch)
tree78332997cd410acf5e1ee9d29aece96185e00c78
parent08700251e57a6fe9133fe77a31b098a99abd26e8 (diff)
downloadgcc-8c894ae273073a4a45cd37be4ee2b06c35c40dd6.zip
gcc-8c894ae273073a4a45cd37be4ee2b06c35c40dd6.tar.gz
gcc-8c894ae273073a4a45cd37be4ee2b06c35c40dd6.tar.bz2
re PR fortran/29806 (Error if CONTAINS is present without SUBPROGRAM)
fortran/ 2006-11-15 Tobias Burnus <burnus@net-b.de> PR fortran/29806 * parse.c (parse_contained): Check for empty contains statement. testsuite/ 2006-11-15 Tobias Burnus <burnus@net-b.de> PR fortran/29806 * gfortran.dg/contains.f90: New test. * gfortran.dg/derived_function_interface_1.f90: Add a dg-warning. From-SVN: r118851
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/parse.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/contains.f9011
-rw-r--r--gcc/testsuite/gfortran.dg/derived_function_interface_1.f902
5 files changed, 30 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3206979..4486399 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-15 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/29806
+ * parse.c (parse_contained): Check for empty contains statement.
+
2006-11-15 Bud Davis <bdavis9659@sbcglobal.net>
PR fortran/28974
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 5aabbb4..9d85516 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -2757,6 +2757,7 @@ parse_contained (int module)
gfc_statement st;
gfc_symbol *sym;
gfc_entry_list *el;
+ int contains_statements = 0;
push_state (&s1, COMP_CONTAINS, NULL);
parent_ns = gfc_current_ns;
@@ -2777,6 +2778,7 @@ parse_contained (int module)
case ST_FUNCTION:
case ST_SUBROUTINE:
+ contains_statements = 1;
accept_statement (st);
push_state (&s2,
@@ -2860,6 +2862,11 @@ parse_contained (int module)
gfc_free_namespace (ns);
pop_state ();
+ if (!contains_statements)
+ /* This is valid in Fortran 2008. */
+ gfc_notify_std (GFC_STD_GNU, "Extension: "
+ "CONTAINS statement without FUNCTION "
+ "or SUBROUTINE statement at %C");
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a53e25c..0288e55 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-15 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/29806
+ * gfortran.dg/contains.f90: New test.
+ * gfortran.dg/derived_function_interface_1.f90: Add a dg-warning.
+
2006-11-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/29581
diff --git a/gcc/testsuite/gfortran.dg/contains.f90 b/gcc/testsuite/gfortran.dg/contains.f90
new file mode 100644
index 0000000..221488a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/contains.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! { dg-options "-std=f2003" }
+! Check whether empty contains are allowd
+! PR fortran/29806
+module x
+ contains
+end module x ! { dg-error "CONTAINS statement without FUNCTION or SUBROUTINE statement" }
+
+program y
+ contains
+end program y ! { dg-error "CONTAINS statement without FUNCTION or SUBROUTINE statement" }
diff --git a/gcc/testsuite/gfortran.dg/derived_function_interface_1.f90 b/gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
index 2cee73c..09916be6 100644
--- a/gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
+++ b/gcc/testsuite/gfortran.dg/derived_function_interface_1.f90
@@ -37,4 +37,4 @@ contains
type(foo) function fun() ! { dg-error "already has an explicit interface" }
end function fun ! { dg-error "Expecting END PROGRAM" }
-end
+end ! { dg-warning "CONTAINS statement without FUNCTION or SUBROUTINE statement" }