diff options
author | Tobias Burnus <burnus@net-b.de> | 2006-11-15 11:02:21 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2006-11-15 11:02:21 +0100 |
commit | 8c894ae273073a4a45cd37be4ee2b06c35c40dd6 (patch) | |
tree | 78332997cd410acf5e1ee9d29aece96185e00c78 | |
parent | 08700251e57a6fe9133fe77a31b098a99abd26e8 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/parse.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/contains.f90 | 11 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/derived_function_interface_1.f90 | 2 |
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" } |