[Bug fortran/126909] Lost statement label in a program with a CONTAINS section

"kargl at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126909

--- Comment #1 from Steve Kargl <kargl at gcc dot gnu.org> ---
A quick debugging session suggests that the label is
inserted into the conflicting namespaces.

(gdb) b match.cc:545
(gdb) run t2.f90
Breakpoint 1, gfc_match_st_label (label=0x7fffffffe0c8) at
../../gcc/gcc/fortran/match.cc:545
545       old_loc = gfc_current_locus;
(gdb) p gfc_state_stack->state
$4 = COMP_PROGRAM

This is the 'goto 10' statement, and we're in the COMP_PROGRAM
namespace

(gdb) c
Continuing.

Breakpoint 1, gfc_match_st_label (label=label@entry=0x37e7278
<gfc_statement_label>)
    at ../../gcc/gcc/fortran/match.cc:545
545       old_loc = gfc_current_locus;
(gdb) p gfc_state_stack->state
$5 = COMP_CONTAINS

We're now in a 'contains' namespace.

(gdb) bt
#0  gfc_match_st_label (label=label@entry=0x37e7278 <gfc_statement_label>)
    at ../../gcc/gcc/fortran/match.cc:545
#1  0x0000000000add4ca in next_free () at ../../gcc/gcc/fortran/parse.cc:1592
#2  next_statement () at ../../gcc/gcc/fortran/parse.cc:1931
#3  0x0000000000ae362f in parse_contained (module=module@entry=0)
    at ../../gcc/gcc/fortran/parse.cc:7052
#4  0x0000000000ae3224 in parse_progunit (st=<optimized out>, st@entry=ST_NONE)
    at ../../gcc/gcc/fortran/parse.cc:7286
#5  0x0000000000ae48e6 in gfc_parse_file () at
../../gcc/gcc/fortran/parse.cc:7799
#6  0x0000000000b4d298 in gfc_be_parse_file () at
../../gcc/gcc/fortran/f95-lang.cc:249
#7  0x00000000012b4b3a in compile_file () at ../../gcc/gcc/toplev.cc:455
#8  0x0000000000a075d4 in do_compile () at ../../gcc/gcc/toplev.cc:2228
#9  toplev::main (this=this@entry=0x7fffffffe60e, argc=<optimized out>,
argc@entry=2, 
    argv=<optimized out>, argv@entry=0x7fffffffe6a0) at
../../gcc/gcc/toplev.cc:2396
#10 0x0000000000a08efe in main (argc=2, argv=0x7fffffffe6a0) at
../../gcc/gcc/main.cc:39

After accepting the labeled end-program-stmt we have

(gdb) p *gfc_current_ns->st_labels
$16 = {priority = 23594, left = 0x0, right = 0x0, value = 10, defined =
ST_LABEL_TARGET, 
  referenced = ST_LABEL_UNKNOWN, format = 0x0, backend_decl = 0x0, where =
{nextc = 0x804612488, u = {lb = 0x804612460, location = 34433213536}}, ns =
0x804750c00, omp_region = 0}
(gdb) p *gfc_current_ns->parent->st_labels
$17 = {priority = 13545, left = 0x0, right = 0x0, value = 10, defined =
ST_LABEL_UNKNOWN, 
  referenced = ST_LABEL_TARGET, format = 0x0, backend_decl = 0x0, where =
{nextc = 0x8046de468, u = {lb = 0x8046de420, location = 34434049056}}, ns =
0x80474f400, omp_region = 0}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.