Skip to content

Commit 1cac954

Browse files
committed
Fix Intel 2025 segfault in comm expand: prevent allocatable reallocation
Use array(:) = transfer(..., size=size(array)) instead of array = transfer(...) to prevent the compiler from reallocating the LHS during assignment. Applies to all 4 expand routines (real 1D/2D/3D and integer 1D).
1 parent b12d5ee commit 1cac954

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/fitpack_core.F90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18461,7 +18461,7 @@ pure subroutine FP_REAL_COMM_EXPAND_1D(array, buffer)
1846118461
if (all(bnd /= FP_NOT_ALLOC)) then
1846218462
allocate(array(bnd(1):bnd(2)))
1846318463
n = FP_RCOMMS_PER_BITS(size(array, kind=FP_SIZE) * storage_size(array))
18464-
array = transfer(buffer(header+1:header+n), array)
18464+
array(:) = transfer(buffer(header+1:header+n), array, size(array))
1846518465
end if
1846618466
end subroutine FP_REAL_COMM_EXPAND_1D
1846718467

@@ -18478,7 +18478,7 @@ pure subroutine FP_REAL_COMM_EXPAND_2D(array, buffer)
1847818478
if (all(bnd /= FP_NOT_ALLOC)) then
1847918479
allocate(array(bnd(1,1):bnd(2,1), bnd(1,2):bnd(2,2)))
1848018480
n = FP_RCOMMS_PER_BITS(size(array, kind=FP_SIZE) * storage_size(array))
18481-
array = reshape(transfer(buffer(header+1:header+n), array, size(array)), shape(array))
18481+
array(:,:) = reshape(transfer(buffer(header+1:header+n), array, size(array)), shape(array))
1848218482
end if
1848318483
end subroutine FP_REAL_COMM_EXPAND_2D
1848418484

@@ -18495,7 +18495,7 @@ pure subroutine FP_REAL_COMM_EXPAND_3D(array, buffer)
1849518495
if (all(bnd /= FP_NOT_ALLOC)) then
1849618496
allocate(array(bnd(1,1):bnd(2,1), bnd(1,2):bnd(2,2), bnd(1,3):bnd(2,3)))
1849718497
n = FP_RCOMMS_PER_BITS(size(array, kind=FP_SIZE) * storage_size(array))
18498-
array = reshape(transfer(buffer(header+1:header+n), array, size(array)), shape(array))
18498+
array(:,:,:) = reshape(transfer(buffer(header+1:header+n), array, size(array)), shape(array))
1849918499
end if
1850018500
end subroutine FP_REAL_COMM_EXPAND_3D
1850118501

@@ -18512,7 +18512,7 @@ pure subroutine FP_SIZE_COMM_EXPAND_1D(array, buffer)
1851218512
if (all(bnd /= FP_NOT_ALLOC)) then
1851318513
allocate(array(bnd(1):bnd(2)))
1851418514
ndoubles = FP_RCOMMS_PER_BITS(size(array, kind=FP_SIZE) * storage_size(array))
18515-
array = transfer(buffer(header+1:header+ndoubles), array)
18515+
array(:) = transfer(buffer(header+1:header+ndoubles), array, size(array))
1851618516
end if
1851718517
end subroutine FP_SIZE_COMM_EXPAND_1D
1851818518

0 commit comments

Comments
 (0)