Re: [PATCH] Fix PR125782 Fix double free for ASSOCIATE over allocatable char funcction
Jerry D <[email protected]> Sun, 14 Jun 2026 13:01:24 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
The master branch has been updated by Jerry DeLisle <[email protected]>: https://gcc.gnu.org/g:e002a4e17481c1a083e2b49374565dbb2621aef8 commit r17-1552-ge002a4e17481c1a083e2b49374565dbb2621aef8 Author: Jerry DeLisle <[email protected]> Date: Sat Jun 13 19:10:04 2026 -0700 fortran: Fix double free in ASSOCIATE over allocatable char function [PR125782] On 6/14/26 12:04 PM, Jerry D wrote: > See attached. > > I plan to commit this as obvious/simple. > > Regression tested on X86_64 > > Best regards > > Jerry > > Author: Jerry DeLisle <[email protected]> > Date: Sat Jun 13 19:10:04 2026 -0700 > > fortran: Fix double free for ASSOCIATE over allocatable character function > [PR125782] > > When an ASSOCIATE selector is a function call returning an allocatable > deferred-length character, trans_associate_var unconditionally added an > extra free of the associate-name's backend decl. That free was added in > 2017 (PR60458/77296) to release the result of a POINTER-valued character > function, which is not otherwise freed. For an ALLOCATABLE-valued > character function, however, the result temporary is already freed by the > procedure call's own cleanup code, and the associate name aliases that > same temporary, so the extra free caused a double free at the end of the > ASSOCIATE block. > > Restrict the extra free to POINTER-valued function results, where it is > still needed. > > Assisted by: Claude Sonnet 4.6 > > PR fortran/125782 > > gcc/fortran/ChangeLog: > > * trans-stmt.cc (trans_associate_var): Only free the associate > name's backend decl for a deferred-length character function > result when the result is a POINTER, not when it is > ALLOCATABLE, since the latter is already freed by the > procedure call's cleanup. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/associate_82.f90: New test.