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:
parent
bbceee64be
commit
4ee3237e0b
4 changed files with 46 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
25
gcc/testsuite/gfortran.dg/duplicate_labels_2.f
Normal file
25
gcc/testsuite/gfortran.dg/duplicate_labels_2.f
Normal 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
|
||||
|
Loading…
Add table
Reference in a new issue