------- Comment #3 from paul dot richard dot thomas at gmail dot com 2010-02-04 05:33 ------- Subject: Re: ICE segfault when reading module file
Tobias, I'll give it some thought at lunchtime. Cheers Paul On Wed, Feb 3, 2010 at 9:40 PM, burnus at gcc dot gnu dot org <gcc-bugzi...@gcc.gnu.org> wrote: > > > ------- Comment #2 from burnus at gcc dot gnu dot org 2010-02-03 20:40 > ------- > Paul, maybe you have an idea how to solve this best. > > One has two modules, (1) one defines "vs_str" and the other (2) defines > interface > module procedure len > end interface > PRIVATE :: len > (and a public interface which uses "len") > > Now in a third (3) module, one loads first module (2) and then module (1); > when > writing the .mod for (3) one writes the following symbol of module (1): > > pure function vs_str(s) result(vs) > character(len=*), intent(in) :: s > character, dimension(len(s)) :: vs > > Now when writing the expression for the upper bound of "vs" (viz. "len(s)"), > one has e->expr_type == EXPR_FUNCTION but e->symtree == NULL, which crashes. > > Note: mio_expr calls fix_mio_expr(), which tries to fix it for the intrinsic > "len", but > e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname); > returns NULL. > > On solution I see is to create a new symtree and add it in fix_mio_expr via > gfc_get_intrinsic_sub_symbol, but somehow I think "len" should not have > disappeared at the first place. > > The crash happens in mio_symtree_ref which simply checks whether the symbol > needs to be written or whether it has been written already. For an intrinsic > fucntion, it does not matter and could thus be skipped (not checked!). For > output, mio_expr then simply writes "0" (for intrinsic function) and "len" > (for > the function name) - albeit with accessing the e->symtree. Thus, one could > also > modify "EXPR_FUNCTION:" of mio_expr to for e->symtree == NULL and (iomode == > IO_OUTPUT) but that means some code replication. > > > -- > > burnus at gcc dot gnu dot org changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > CC| |pault at gcc dot gnu dot org > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41869 > > ------- You are receiving this mail because: ------- > You are on the CC list for the bug, or are watching someone who is. > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41869