Re: [PATCH] fortran: [PR47425] Array constructor fails with length type expr
Jerry D <[email protected]> Thu, 2 Jul 2026 08:32:42 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
ping On 7/1/26 10:15 AM, Jerry D wrote: > See attached patch. > > Regression tested on x86_64. Two new test cases added. > > This one was from a long time ago. > > OK for mainline? > > Regards, > > Jerry > --- > fortran: [PR47425] Array constructor fails with length type expr > > Two separate problems are fixed here. The original test case is fixed > by the one-liner in trans-array.cc. Add check for INTEGER_CST. The > remaining problem starts with parsing and not keeping track of charlens > where some of the charlens are created and later left dangling. Code was > added to keep track of these and remove them as needed. > > PR fortran/47425 > > gcc/fortran/ChangeLog: > > * decl.cc (discard_pending_charlen): Use new helper > function. > (discard_pending_charlens): Likewise. > (build_struct): Likewise. > * gfortran.h (struct gfc_charlen): Add a namespace > pointer to track char len for undo. > (struct gfc_undo_change_set): Add cls > pointer to track charlens created during parsing. > (struct gfc_undo_change_set): Add vec<gfc_charlen *> cls. > (gfc_remove_saved_charlen): Declare new helper function. > * parse.cc (accept_statement): Adjust comment. > * symbol.cc (gfc_merge_new_implicit): Use new helper function > (free_undo_change_set_data): Release cls. > (gfc_drop_last_undo_checkpoint): Splice cls into parent > changeset. > (gfc_restore_last_undo_checkpoint): Remove and free charlens > tracked in cls. > (gfc_commit_symbols): Truncate cls. > (gfc_remove_saved_charlen): New function to remove > previously saved char len. > (gfc_free_namespace): Remove charlens from undo before freeing > to prevent double-free. > (gfc_enforce_clean_symbol_state): Clear cls instead of asserting > empty; non-tentative callers leave charlens in cls. > * trans-array.cc (trans_array_constructor): Add guard. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/pr47425-1.f90: New test. > * gfortran.dg/pr47425-2.f90: New test. > ---