aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/symbol.c15
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/duplicate_labels_2.f25
4 files changed, 46 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fa92219..85538ee 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-18 Mikael Morin <mikael.morin@sfr.fr>
+
+ PR fortran/50071
+ * symbol.c (gfc_get_st_label): Use the derived type namespace when
+ we are parsing a derived type definition.
+
2011-08-18 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index b761cdd..4463460 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2127,11 +2127,16 @@ gfc_get_st_label (int labelno)
gfc_st_label *lp;
gfc_namespace *ns;
- /* Find the namespace of the scoping unit:
- If we're in a BLOCK construct, jump to the parent namespace. */
- ns = gfc_current_ns;
- while (ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL)
- ns = ns->parent;
+ if (gfc_current_state () == COMP_DERIVED)
+ ns = gfc_current_block ()->f2k_derived;
+ else
+ {
+ /* Find the namespace of the scoping unit:
+ If we're in a BLOCK construct, jump to the parent namespace. */
+ ns = gfc_current_ns;
+ while (ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL)
+ ns = ns->parent;
+ }
/* First see if the label is already in this namespace. */
lp = ns->st_labels;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4737966..150c1e5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-18 Mikael Morin <mikael.morin@sfr.fr>
+
+ PR fortran/50071
+ * gfortran.dg/duplicate_labels_2.f: New test.
+
2011-08-18 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/c1x-noreturn-1.c, gcc.dg/c1x-noreturn-2.c,
diff --git a/gcc/testsuite/gfortran.dg/duplicate_labels_2.f b/gcc/testsuite/gfortran.dg/duplicate_labels_2.f
new file mode 100644
index 0000000..8a3692d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/duplicate_labels_2.f
@@ -0,0 +1,25 @@
+! { dg-do compile }
+!
+! PR fortran/50071
+! Duplicate statement labels should not be rejected if they appear in
+! different scoping units
+!
+! Contributed by Vittorio Zecca <zeccav@gmail.com>
+
+c gfortran complains about duplicate statement labels
+c this is a legal program because types have their own scoping units
+c and you may have same labels in different scoping units,
+c as you may have same identifiers inside, like G.
+ type t1
+1 integer G
+ end type
+ type t2
+1 integer G
+ end type
+c this is legal
+ goto 1
+ print *,'bad'
+1 continue
+ print *,'good'
+ end
+