https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108895
Thomas Schwinge <tschwinge at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2023-02-23 CC| |burnus at gcc dot gnu.org, | |tschwinge at gcc dot gnu.org Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #1 from Thomas Schwinge <tschwinge at gcc dot gnu.org> --- Thanks for the detailed report. (In reply to Henry Le Berre from comment #0) > > program p_main > > > > real(kind(0d0)), allocatable, dimension(:) :: arrs > > !$acc declare create(arrs) > > > > allocate(arrs(1000)) > > !$acc enter data create(arrs(1000)) > > !$acc update device(arrs(1:1000)) > > > > end program > > Compiled with: > > > gfortran -g -fopenacc -foffload-options=-march=gfx90a sample.f90 -o sample > > Produces: > > > [hberre3@102:instinct]:gcc-acc-test $ ./sample > > > > Program received signal SIGSEGV: Segmentation fault - invalid memory > > reference. > > > > Backtrace for this error: > > [...] Confirmed for GCN offloading. For nvptx offloading, we get "similarly": libgomp: cuMemGetAddressRange_v2 error: named symbol not found libgomp: Copying of host object [0x10b6090..0x10b7fd0) to dev object [0x7fb75effe2c8..0x7fb75f000208) failed For nvfortran 23.1-0, there's no execution failure. > Observations: > > 1) If the length/size of the array were smaller (say 10 or 100) no > segmentation fault is observed, possibly indicating silent R/W operations to > memory we don't own. > > 2) On ORNL Summit's GCC 8.3.1 (nvptx), this sample does not produce a > segfault. Can't really recommend using five years old GCC 8 for code offloading anymore, but as a cross-check that's been valuable, of course. I see this execution failure also for GCC 12, 11, 10 -- don't have 9, 8 builds around anymore. Not sure if it's a regression really, of if this GCC 8 just didn't run into this for other reasons. I however do see no execution failure for devel/omp/gcc-12, devel/omp/gcc-11, devel/omp/gcc-10 branches nvptx offloading builds. This may be due to different code paths being taken as the latter branches contain preliminary support for OpenACC "Changes from Version 2.0 to 2.5": "The 'declare create' directive with a Fortran 'allocatable' has new behavior", which GCC release branches and master branch don't support yet. (As I also mentioned in your PR106643 "[gfortran + OpenACC] Allocate in module causes refcount error", for example.) However, that's no excuse for the execution failure seen here, of course. Will need to investigate. > 3) If I translate this sample to C, no matter how large the array is, a > segfault is not produced. Very likely it's due to some Fortran-specific code paths.