Commit 4ee3237e by Mikael Morin Committed by Mikael Morin

re PR fortran/50071 (gfortran does not distinguish labels in different type scoping units)

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  Mikael Morin  <mikael.morin@sfr.fr>

	PR fortran/50071
	* gfortran.dg/duplicate_labels_2.f: New test.

From-SVN: r177882
parent bbceee64
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
......
......@@ -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;
......
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,
......
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment