[Bug fortran/123255] New: OpenACC: copyin of allocatable array component computes wrong size
albert at tugraz dot at
gcc-bugzilla@gcc.gnu.org
Mon Dec 22 10:57:57 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123255
Bug ID: 123255
Summary: OpenACC: copyin of allocatable array component
computes wrong size
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: albert at tugraz dot at
Target Milestone: ---
current trunk; repo base upstream/master at
769041822723208bf85a91ac409b9b0bdae3fff0 (2025-12-22)
COLLECT_GCC=/opt/gcc16/bin/gfortran
COLLECT_LTO_WRAPPER=/opt/gcc16/libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
Target: x86_64-pc-linux-gnu
Thread model: posix
gcc version 16.0.0 20251222 (experimental) (GCC)
When mapping an allocatable array component of a derived type to the device
using !$acc enter data copyin(obj%array), libgomp computes the wrong size for
the copy operation. It uses the array descriptor size (64 bytes) instead of the
actual allocated data size, causing "invalid size" error.
Reproducer:
program mre
use, intrinsic :: iso_fortran_env, only: dp => real64
implicit none
type :: container_t
integer :: n
real(dp), allocatable :: data(:)
end type container_t
type(container_t) :: c
integer :: i
c%n = 1000
allocate(c%data(c%n))
c%data = [(real(i, dp), i = 1, c%n)]
print *, "Array size (bytes):", size(c%data) * 8
!$acc enter data copyin(c%data)
print *, "PASS"
!$acc exit data delete(c%data)
end program mre
Build and run:
gfortran -O2 -fopenacc -foffload=nvptx-none mre.f90 -o mre
ACC_DEVICE_TYPE=nvidia ./mre
Output:
Array size (bytes): 8000
libgomp: invalid size
libgomp: Copying of host object [0x4040c8..0x404108) to dev object
[0x7fd8ab600000..0x7fd8ab600040) failed
The host object range 0x4040c8..0x404108 is only 64 bytes (0x40), which is
the
array descriptor size, not the actual data (8000 bytes for 1000 doubles).
More information about the Gcc-bugs
mailing list