]> git.ipfire.org Git - thirdparty/gcc.git/commit
fortran: Fix conv of UNION constructors [PR105310]
authorFritz Reese <foreese@gcc.gnu.org>
Tue, 19 Apr 2022 20:45:46 +0000 (16:45 -0400)
committerFritz Reese <foreese@gcc.gnu.org>
Thu, 21 Apr 2022 14:51:04 +0000 (10:51 -0400)
commit30e6e43f0bbd84ac01cfcbfbd4b60f4495365b7d
tree19a865b2076447ed3500bbe7ea882fe3c57b24e3
parent2bc68e34a695530b60caa23dad47b0f42f6fc209
fortran: Fix conv of UNION constructors [PR105310]

This fixes an ICE when a UNION is the (1+8*2^n)-th field in a DEC
STRUCTURE when compiled with -finit-derived -finit-local-zero.
The problem was CONSTRUCTOR_APPEND_ELT from within gfc_conv_union_initializer
modified the vector pointer, but the pointer was passed by-value,
so the old pointer from the caller (gfc_conv_structure) pointed to freed
memory.

PR fortran/105310

gcc/fortran/ChangeLog:

* trans-expr.c (gfc_conv_union_initializer): Pass vec* by reference.

gcc/testsuite/ChangeLog:

* gfortran.dg/dec_union_12.f90: New test.

(cherry picked from commit c049f638da4f7b32b11e4d895184e0960bae5291)
gcc/fortran/trans-expr.c
gcc/testsuite/gfortran.dg/dec_union_12.f90 [new file with mode: 0755]