[Patch, fortran] PR107900 Select type with intrinsic type inside associate causes ICE / Segmenation fault
Harald Anlauf
anlauf@gmx.de
Tue Jun 20 21:57:01 GMT 2023
Hi Paul,
On 6/20/23 12:54, Paul Richard Thomas via Gcc-patches wrote:
> Hi Harald,
>
> Fixing the original testcase in this PR turned out to be slightly more
> involved than I expected. However, it resulted in an open door to fix
> some other PRs and the attached much larger patch.
>
> This time, I did remember to include the testcases in the .diff :-)
indeed! :-)
I've only had a superficial look so far although it looks very good.
(I have to trust your experience with unlimited polymorphism.)
However, I was wondering about the following helper function:
+bool
+gfc_is_ptr_fcn (gfc_expr *e)
+{
+ return e != NULL && e->expr_type == EXPR_FUNCTION
+ && (gfc_expr_attr (e).pointer
+ || (e->ts.type == BT_CLASS
+ && CLASS_DATA (e)->attr.class_pointer));
+}
+
+
/* Copy a shape array. */
Is there a case where gfc_expr_attr (e).pointer returns false
and you really need the || part? Looking at gfc_expr_attr
and the present context, it might just not be necessary.
> I believe that, between the Change.Logs and the comments, it is
> reasonably self-explanatory.
>
> OK for trunk?
OK from my side.
Thanks for the patch!
Harald
> Regards
>
> Paul
>
> Fortran: Fix some bugs in associate [PR87477]
>
> 2023-06-20 Paul Thomas <pault@gcc.gnu.org>
>
> gcc/fortran
> PR fortran/87477
> PR fortran/88688
> PR fortran/94380
> PR fortran/107900
> PR fortran/110224
> * decl.cc (char_len_param_value): Fix memory leak.
> (resolve_block_construct): Remove unnecessary static decls.
> * expr.cc (gfc_is_ptr_fcn): New function.
> (gfc_check_vardef_context): Use it to permit pointer function
> result selectors to be used for associate names in variable
> definition context.
> * gfortran.h: Prototype for gfc_is_ptr_fcn.
> * match.cc (build_associate_name): New function.
> (gfc_match_select_type): Use the new function to replace inline
> version and to build a new associate name for the case where
> the supplied associate name is already used for that purpose.
> * resolve.cc (resolve_assoc_var): Call gfc_is_ptr_fcn to allow
> associate names with pointer function targets to be used in
> variable definition context.
> * trans-decl.cc (gfc_get_symbol_decl): Unlimited polymorphic
> variables need deferred initialisation of the vptr.
> (gfc_trans_deferred_vars): Do the vptr initialisation.
> * trans-stmt.cc (trans_associate_var): Ensure that a pointer
> associate name points to the target of the selector and not
> the selector itself.
>
> gcc/testsuite/
> PR fortran/87477
> PR fortran/107900
> * gfortran.dg/pr107900.f90 : New test
>
> PR fortran/110224
> * gfortran.dg/pr110224.f90 : New test
>
> PR fortran/88688
> * gfortran.dg/pr88688.f90 : New test
>
> PR fortran/94380
> * gfortran.dg/pr94380.f90 : New test
>
> PR fortran/95398
> * gfortran.dg/pr95398.f90 : Set -std=f2008, bump the line
> numbers in the error tests by two and change the text in two.
More information about the Fortran
mailing list