Re: [PATCH, fortran][16 Regression] Fix PR124482 SEGV in resolve_cyclic_derived_type

Jerry D <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Committed after Rainer confirmed the fix in bugzilla.

commit d8b00bf2e1514cd132a9febaa9849ab46cd316f5 (HEAD -> master, origin/master, 
origin/HEAD)
Author: Christopher Albert <[email protected]>
Date:   Fri Mar 13 20:50:07 2026 +0100

     fortran: Fix use-after-free in CLASS component error recovery [PR124482]

Best regards,

Jerry

On 3/14/26 11:26 AM, Jerry D wrote:
> The attached patch fixes the regression found by Rainer on Solaris Spark. It 
> manifests on x86_64 as invalid reads identified by valgrind.
> 
> I did confirm the valgrin errors before the patch and that they go away after 
> the patch. This is sufficient reason to commit this. I did not hear back from 
> Rainer yet in the PR, however if we fix it he will see in his regular builds.
> 
> Regression tested on x86_64. Valgrind tested.
> 
> OK for mainline?
> 
> I will consider backporting to 15 if reasonable. Likely this will be a combining 
> of the original fix for 106946 and this one. (easy to do).
> 
> Regards,
> 
> Jerry
> 
> From: Christopher Albert <[email protected]>
> Date: Fri, 13 Mar 2026 20:50:07 +0100
> Subject: [PATCH] fortran: Fix use-after-free in CLASS component error recovery
>   [PR124482]
> 
> The error recovery added in r16-8021 (PR106946) freed CLASS container
> symbols when removing invalid CLASS components from a derived type.
> However, gfc_build_class_symbol reuses existing containers when multiple
> components share the same class type and attributes.  Freeing the
> container for a failed component also invalidated it for previously
> committed components, causing a use-after-free detectable with valgrind
> and manifesting as a SEGV on Solaris/SPARC.
> 
> Fix by deferring CLASS container cleanup until after all failed
> components are unlinked, then freeing the container only if no remaining
> component still references it.
> 
> gcc/fortran/ChangeLog:
> 
>      PR fortran/124482
>      * decl.cc (gfc_match_data_decl): Defer CLASS container cleanup
>      until after all failed components are unlinked.  Check remaining
>      component list before freeing a shared container.
> 
> Signed-off-by: Christopher Albert <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.