Re: [PATCH] fortran PR95542 Fix ICE for deferred-length CHARACTER, result via host association
Jerry D <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
On 8/16/26 12:02 PM, Mikael Morin wrote: > Le 16/08/2026 à 02:29, Jerry D a écrit : >> Attached is the patch I re-discovered while cleaning up worktrees. >> >> Regression tested on x86_64. >> >> OK for mainline? >> >> Regards, >> >> Jerry >> --- > >> >> gfc_get_symbol_decl has an assert meant to verify that a deferred-length >> string's length variable lives in the same scope as the symbol it >> belongs to. This is wrong when sym->backend_decl is itself the enclosing >> function's FUNCTION_DECL. The correct comparison is >> DECL_CONTEXT (length) == sym->backend_decl directly. >> > >> diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc >> index 47b28c1d003..df5aef2fd86 100644 >> --- a/gcc/fortran/trans-decl.cc >> +++ b/gcc/fortran/trans-decl.cc >> @@ -1848,10 +1848,15 @@ gfc_get_symbol_decl (gfc_symbol * sym) >> gfc_add_decl_to_parent_function (length); >> } >> >> + /* When the symbol's own backend_decl is a FUNCTION_DECL, its >> + DECL_CONTEXT is where that function itself is declared, not >> + where its locals live. */ >> gcc_assert (sym->backend_decl == current_function_decl >> ? DECL_CONTEXT (length) == current_function_decl >> - : (DECL_CONTEXT (sym->backend_decl) >> - == DECL_CONTEXT (length))); >> + : (TREE_CODE (sym->backend_decl) == FUNCTION_DECL >> + ? DECL_CONTEXT (length) == sym->backend_decl >> + : (DECL_CONTEXT (sym->backend_decl) >> + == DECL_CONTEXT (length)))); > The first condition (sym->backend_decl == current_function_decl) is redundant > with the second one (TREE_CODE (sym->backend_decl) == FUNCTION_DECL); I think > the outer conditional can be removed completely. > > OK with that change. Agree, thanks for review, edit made. I will commit after a complete testsuite check Thanks again, Jerry ---