Re: [PATCH] fortran: [PR53800] Wrong copy-in/out with CLASS array to assumed-shape TYPE
Jerry DeLisle <[email protected]> Mon, 3 Aug 2026 17:14:10 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
PING please On 7/30/26 10:21 AM, Jerry D wrote: > See the attached patch. > > As stated in the PR we were missing the stride multiplier (ie span) > > I will note as a useful tool: I had an initial patch for this but wanted > to exercise it. I prompted Claude Pro Opus 5 to create numerous > variations on the original test case provided by Tobias Burnus in the > original report. The result was 25 to 30 variations which were helpful > in identifying code paths I would not have otherwise found. I am not > using those test cases here. > > I flagged out this one to work on as it has been around a long time and > we were giving wrong results without any idea it was happening. > > I also wanted to mention that the fortran standardese is difficult to > interpret but I think I got this right. > > Regression tested on x86_64. > > OK for mainline? > > Comments appreciated. > > Regards, > > Jerry > --- > fortran: [PR53800] Wrong copy-in/out with CLASS array to assumed- > shape TYPE > > A CLASS array actual passed to a plain assumed-shape derived-type > dummy > was always copied in and out, so pointers associated with the dummy > went > stale on return. F2023 15.5.2.5 paragraph 9 requires the dummy to be > associated with the actual's storage when it has the TARGET > attribute and > lacks CONTIGUOUS and VALUE; paragraph 8 leaves every other case > free to > use a copy. Pass such a dummy by reference and address its > elements with > the descriptor's runtime span. > > PR fortran/53800 > > gcc/fortran/ChangeLog: > > * trans-array.cc (need_span): New function. > (gfc_get_array_span): Read the span from the saved > descriptor of a > span-array dummy, but not for a sub-array reached through a > component. > (gfc_conv_scalarized_array_ref): Use need_span. > (gfc_conv_array_ref): Likewise. > (build_array_ref): Default DECL to DESC for a span-array decl. > * trans-decl.cc (gfc_build_dummy_array_decl): Mark a TARGET > assumed-shape derived-type dummy as needing runtime span > addressing, unless it is repacked. > * trans-expr.cc (class_actual_aliases_type_dummy): New > function. > (gfc_class_array_data_assign): Also copy the span field. > (gfc_conv_procedure_call): Use > class_actual_aliases_type_dummy to > skip copy-in/copy-out for both the class array reference > and the > class array function actual argument. > * trans.cc (get_array_span): Read the span from the dummy's > saved > descriptor for span-array decls. > * trans.h (struct lang_decl): Add span_array bitfield. > (GFC_DECL_SPAN_ARRAY_P): New macro. > (GFC_DECL_GET_SPAN_ARRAY_P): New macro. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/class_to_type_5.f90: New test. > * gfortran.dg/class_to_type_6.f90: New test. >