Skip to content

Commit 05a2e5f

Browse files
committed
Pin array before taking pointers in abstractarray tests
1 parent f7f82b0 commit 05a2e5f

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

test/abstractarray.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,8 @@ Base.cconvert(::Type{Ptr{T}}, S::Strider{T}) where {T} = memoryref(S.data.ref, S
12601260

12611261
@testset "Simple 3d strided views and permutes" for sz in ((5, 3, 2), (7, 11, 13))
12621262
A = collect(reshape(1:prod(sz), sz))
1263+
# The following test takes pointers from A, we need to ensure A is not moved by GC.
1264+
Base.increment_pin_count!(A)
12631265
S = Strider(vec(A), strides(A), sz)
12641266
@test pointer(A) == pointer(S)
12651267
for i in 1:prod(sz)
@@ -1318,10 +1320,13 @@ Base.cconvert(::Type{Ptr{T}}, S::Strider{T}) where {T} = memoryref(S.data.ref, S
13181320
# constant propagation in the PermutedDimsArray constructor
13191321
X = @inferred (A -> PermutedDimsArray(A, (2,3,1)))(A)
13201322
@test @inferred((X -> PermutedDimsArray(X, (3,1,2)))(X)) == A
1323+
Base.decrement_pin_count!(A)
13211324
end
13221325

13231326
@testset "simple 2d strided views, permutes, transposes" for sz in ((5, 3), (7, 11))
13241327
A = collect(reshape(1:prod(sz), sz))
1328+
# The following test takes pointers from A, we need to ensure A is not moved by GC.
1329+
Base.increment_pin_count!(A)
13251330
S = Strider(vec(A), strides(A), sz)
13261331
@test pointer(A) == pointer(S)
13271332
for i in 1:prod(sz)
@@ -1387,6 +1392,7 @@ end
13871392
@test Vp[i] == Avp[i] == Svp[i] == Avt[i] == Ava[i] == Svt[i] == Sva[i]
13881393
end
13891394
end
1395+
Base.decrement_pin_count!(A)
13901396
end
13911397

13921398
@testset "first/last n elements of $(typeof(itr))" for itr in (collect(1:9),
@@ -1915,6 +1921,7 @@ module IRUtils
19151921
end
19161922

19171923
function check_pointer_strides(A::AbstractArray)
1924+
Base.increment_pin_count!(A)
19181925
# Make sure stride(A, i) is equivalent with strides(A)[i] (if 1 <= i <= ndims(A))
19191926
dims = ntuple(identity, ndims(A))
19201927
map(i -> stride(A, i), dims) == @inferred(strides(A)) || return false
@@ -1924,6 +1931,7 @@ function check_pointer_strides(A::AbstractArray)
19241931
for i in eachindex(IndexLinear(), A)
19251932
A[i] === Base.unsafe_load(pointer(A, i)) || return false
19261933
end
1934+
Base.decrement_pin_count!(A)
19271935
return true
19281936
end
19291937

0 commit comments

Comments
 (0)