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.
> ---