I do not think that there will be a PR for the ICE. This is a regression introduced by my patch for PR70149 (September 30th). A patch is attached. I will commit it as 'obvious' as soon as it has finished regtesting. I will also commit the patch for PR58618 shortly afterwards. Thanks for the review.
Paul On Wed, 17 Oct 2018 at 22:17, Tobias Burnus <bur...@net-b.de> wrote: > > Hi Paul, > > Paul Richard Thomas wrote: > > This problem concerned associate targets being substrings. It turns > > out that they are returned as pointer types (with a different cast for > > unity based substrings ***sigh***) and so can be assigned directly to > > the associate name. The patch quite simply removed the condition that > > such targets be allocatable, pointer or dummy. > > I noticed in the course of working up the testcase that > > character (:), pointer :: ptr => NULL() > > character (6), target :: tgt = 'lmnopq' > > ptr => tgt > > print *, len (ptr), ptr > > end > > ICEs on the NULL initialization of the pointer but works fine if this > > is removed. Has this already been posted as a PR? > > > I leave it to Dominique to search for a PR; otherwise, I believe the > attach patch fixes the issue. – It just needs someone to package it with > a test case, regtest and commit it. > > > > Bootstrapped and regtested on FC28/x86_64 - OK for trunk? > > OK – thanks for the fix. > > Tobias > > > 2018-10-17 Paul Thomas <pa...@gcc.gnu.org> > > > > PR fortran/58618 > > * trans-stmt.c (trans_associate_var): All strings that return > > as pointer types can be assigned directly to the associate > > name so remove 'attr' and the condition that uses it. > > > > 2018-10-17 Paul Thomas <pa...@gcc.gnu.org> > > > > PR fortran/58618 > > * gfortran.dg/associate_45.f90 : New test. -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein
Index: gcc/fortran/trans-decl.c =================================================================== *** gcc/fortran/trans-decl.c (revision 265231) --- gcc/fortran/trans-decl.c (working copy) *************** gfc_get_symbol_decl (gfc_symbol * sym) *** 1762,1768 **** gfc_finish_var_decl (length, sym); if (!sym->attr.associate_var && TREE_CODE (length) == VAR_DECL ! && sym->value && sym->value->ts.u.cl->length) { gfc_expr *len = sym->value->ts.u.cl->length; DECL_INITIAL (length) = gfc_conv_initializer (len, &len->ts, --- 1762,1769 ---- gfc_finish_var_decl (length, sym); if (!sym->attr.associate_var && TREE_CODE (length) == VAR_DECL ! && sym->value && sym->value->expr_type != EXPR_NULL ! && sym->value->ts.u.cl->length) { gfc_expr *len = sym->value->ts.u.cl->length; DECL_INITIAL (length) = gfc_conv_initializer (len, &len->ts, *************** gfc_get_symbol_decl (gfc_symbol * sym) *** 1772,1778 **** DECL_INITIAL (length)); } else ! gcc_assert (!sym->value); } gfc_finish_var_decl (decl, sym); --- 1773,1779 ---- DECL_INITIAL (length)); } else ! gcc_assert (!sym->value || sym->value->expr_type == EXPR_NULL); } gfc_finish_var_decl (decl, sym); Index: gcc/testsuite/gfortran.dg/deferred_character_30.f90 =================================================================== *** gcc/testsuite/gfortran.dg/deferred_character_30.f90 (nonexistent) --- gcc/testsuite/gfortran.dg/deferred_character_30.f90 (working copy) *************** *** 0 **** --- 1,9 ---- + ! { dg-do compile } + ! + ! Fix a regression introduced by the patch for PR70149. + ! + character (:), pointer :: ptr => NULL() ! The NULL () caused an ICE. + character (6), target :: tgt = 'lmnopq' + ptr => tgt + print *, len (ptr), ptr + end