diff options
author | Louis Krupp <louis.krupp@zoho.com> | 2015-10-26 19:18:08 +0000 |
---|---|---|
committer | Louis Krupp <lkrupp@gcc.gnu.org> | 2015-10-26 19:18:08 +0000 |
commit | 388902dab9e4b152931ed7c1b6923a43039b546d (patch) | |
tree | f41ac17695569bc67b62d585d4e84326662be4a5 | |
parent | 96f3dd0a661a222f0add68a508a1307e3d619157 (diff) | |
download | gcc-388902dab9e4b152931ed7c1b6923a43039b546d.zip gcc-388902dab9e4b152931ed7c1b6923a43039b546d.tar.gz gcc-388902dab9e4b152931ed7c1b6923a43039b546d.tar.bz2 |
re PR fortran/66056 (ICEs and endless compilation for lonely labels/numbers in type)
2015-10-26 Louis Krupp <louis.krupp@zoho.com>
PR fortran/66056
* fortran.h: Include namespace pointer in statement label
structure.
* symbol.c (gfc_get_st_label): Store pointer to namespace
that owns the statement label tree in each label.
(gfc_free_st_label): Use namespace owning statement label
tree when deleting statement label.
* io.c: Initialize format_asterisk with NULL namespace pointer.
2015-10-26 Louis Krupp <louis.krupp@zoho.com>
PR fortran/66056
* gfortran.dg/empty_label_typedecl.f90: New test
From-SVN: r229390
-rw-r--r-- | gcc/fortran/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 2 | ||||
-rw-r--r-- | gcc/fortran/io.c | 2 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/empty_label_typedecl.f90 | 8 |
6 files changed, 29 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1815451..51eeb0b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,14 @@ +2015-10-26 Louis Krupp <louis.krupp@zoho.com> + + PR fortran/66056 + * fortran.h: Include namespace pointer in statement label + structure. + * symbol.c (gfc_get_st_label): Store pointer to namespace + that owns the statement label tree in each label. + (gfc_free_st_label): Use namespace owning statement label + tree when deleting statement label. + * io.c: Initialize format_asterisk with NULL namespace pointer. + 2015-10-26 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/36192 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index b2894cc..90f63cf 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1291,6 +1291,8 @@ typedef struct gfc_st_label tree backend_decl; locus where; + + gfc_namespace *ns; } gfc_st_label; diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index e5d68fb..dbd02b3 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -28,7 +28,7 @@ along with GCC; see the file COPYING3. If not see gfc_st_label format_asterisk = {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL, - 0, {NULL, NULL}}; + 0, {NULL, NULL}, NULL}; typedef struct { diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index a9a0dc0..bd7758b 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -2195,7 +2195,7 @@ gfc_free_st_label (gfc_st_label *label) if (label == NULL) return; - gfc_delete_bbt (&gfc_current_ns->st_labels, label, compare_st_labels); + gfc_delete_bbt (&label->ns->st_labels, label, compare_st_labels); if (label->format != NULL) gfc_free_expr (label->format); @@ -2260,6 +2260,7 @@ gfc_get_st_label (int labelno) lp->value = labelno; lp->defined = ST_LABEL_UNKNOWN; lp->referenced = ST_LABEL_UNKNOWN; + lp->ns = ns; gfc_insert_bbt (&ns->st_labels, lp, compare_st_labels); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c0f8b0d..7f4f8a0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-10-26 Louis Krupp <louis.krupp@zoho.com> + + PR fortran/66056 + * gfortran.dg/empty_label_typedecl.f90: New test. + 2015-10-26 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/36192 diff --git a/gcc/testsuite/gfortran.dg/empty_label_typedecl.f90 b/gcc/testsuite/gfortran.dg/empty_label_typedecl.f90 new file mode 100644 index 0000000..c85e5be --- /dev/null +++ b/gcc/testsuite/gfortran.dg/empty_label_typedecl.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! { dg-options "-Werror" } +subroutine s + type t + 1 ! { dg-error "empty statement" } + end type +end subroutine +! { dg-excess-errors "warnings being treated as errors" } |