Found this odd code. It starts fine with: gfc_ref *ref = gfc_get_ref (); this uses XCNEW to return nullified memory.
We then operate on ref->u.ar where 'ar' is a struct which is in a 'u'nion which is in gfc_ref. Hence, 'ref->u.ar' is not a pointer. Hence, the following is a wasteful way to memset '\0' the struct – which is still '\0' from the first XCNEW: ref->u.ar = *gfc_get_array_ref() Note the '*' before the XCNEW calling macro gfc_get_array_ref! Committed as obvious. Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank Thürauf
commit a893b26f7311fe65b604f12a8fa5d5d64f5454e2 Author: Tobias Burnus <tob...@codesourcery.com> Date: Mon Jun 14 14:36:20 2021 +0200 Fortran: resolve.c - remove '*XCNEW' based nullifying gcc/fortran/ChangeLog: * resolve.c (resolve_variable): Remove *XCNEW used to nullify nullified memory. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index a37ad665645..45c3ad387ac 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5709,7 +5709,6 @@ resolve_variable (gfc_expr *e) part_ref. */ gfc_ref *ref = gfc_get_ref (); ref->type = REF_ARRAY; - ref->u.ar = *gfc_get_array_ref(); ref->u.ar.type = AR_FULL; if (sym->as) {