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
This commit is contained in:
Mikael Morin 2011-08-18 23:39:42 +02:00 committed by Mikael Morin
parent bbceee64be
commit 4ee3237e0b
4 changed files with 46 additions and 5 deletions

View file

@ -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

View file

@ -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;

View file

@ -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,

View file

@ -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