Re: [PATCH] fortran: [PR47425] Array constructor fails with length type expr

Jerry D <[email protected]> Sat, 4 Jul 2026 09:55:07 -0700
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
No comments, so I plan to commit this on July 6 after the weekend activities.

On 7/2/26 8:32 AM, Jerry D wrote:
> 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.
>> ---
>