[PATCH, committed] Fix ICE on invalid CLASS component in derived type [PR106946]

Jerry D <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Fixes a regression.

The master branch has been updated by Jerry DeLisle <[email protected]>:

https://gcc.gnu.org/g:0d0fbb0a01e4e77e274e0ff9b54506a495a7bdef

commit r16-8021-g0d0fbb0a01e4e77e274e0ff9b54506a495a7bdef
Author: Christopher Albert <[email protected]>
Date:   Tue Mar 10 17:32:32 2026 +0100

     Fortran: Fix ICE on invalid CLASS component in derived type [PR106946]

     When a CLASS component declaration inside a derived type has a syntax
     error (for example, a missing comma), gfc_build_class_symbol creates a
     CLASS container symbol outside the undo mechanism.  Error recovery then
     frees the referenced type but leaves the CLASS container orphaned with
     dangling pointers, leading to an ICE during later resolution.

     Fix this by removing CLASS components created during a failed data
     declaration from the derived type component chain, deleting their
     namespace symtree entries only when they are still present, releasing
     the CLASS container symbol, and freeing the component itself.  Also
     expand the regression coverage to exercise allocatable and pointer CLASS
     declarations, including a valid component followed by a bad one.

     gcc/fortran/ChangeLog:

             PR fortran/106946
             * decl.cc (gfc_match_data_decl): Remove CLASS components added by a
             failed declaration in a derived type, and guard symtree deletion.
             * gfortran.h (gfc_free_component, gfc_delete_symtree): Declare.
             * symbol.cc (gfc_free_component): New function.
             (free_components): Use it.
             (gfc_delete_symtree): Make non-static.

     gcc/testsuite/ChangeLog:

             PR fortran/106946
             * gfortran.dg/pr106946.f90: Cover allocatable and pointer CLASS
             declarations, including a valid component followed by a bad one.

     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.