https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71880
--- Comment #7 from Harald Anlauf <anlauf at gmx dot de> --- (In reply to Harald Anlauf from comment #6) > Additional data points: > > - The ICE in comment #4 can be reproduced with > > character(:), dimension(:), pointer :: p => NULL() > write(*,*) size(p) ! ICE > write(*,*) len(p) ! ICE > end The ICE is generated by the assert at trans-decl.c:1738 /* Associate names can use the hidden string length variable of their associated target. */ if (sym->ts.type == BT_CHARACTER && TREE_CODE (length) != INTEGER_CST) { gfc_finish_var_decl (length, sym); gcc_assert (!sym->value); } It does not show up when the initialization is removed, or when the "pointer" is replaced by "allocatable".