@@ -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)
13211324end
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)
13901396end
13911397
13921398@testset " first/last n elements of $(typeof (itr)) " for itr in (collect (1 : 9 ),
@@ -1915,6 +1921,7 @@ module IRUtils
19151921end
19161922
19171923function 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
19281936end
19291937
0 commit comments