@@ -1260,6 +1260,8 @@ Base.cconvert(::Type{Ptr{T}}, S::Strider{T}) where {T} = memoryref(S.data.ref, S
1260
1260
1261
1261
@testset " Simple 3d strided views and permutes" for sz in ((5 , 3 , 2 ), (7 , 11 , 13 ))
1262
1262
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)
1263
1265
S = Strider (vec (A), strides (A), sz)
1264
1266
@test pointer (A) == pointer (S)
1265
1267
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
1318
1320
# constant propagation in the PermutedDimsArray constructor
1319
1321
X = @inferred (A -> PermutedDimsArray (A, (2 ,3 ,1 )))(A)
1320
1322
@test @inferred ((X -> PermutedDimsArray (X, (3 ,1 ,2 )))(X)) == A
1323
+ Base. decrement_pin_count! (A)
1321
1324
end
1322
1325
1323
1326
@testset " simple 2d strided views, permutes, transposes" for sz in ((5 , 3 ), (7 , 11 ))
1324
1327
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)
1325
1330
S = Strider (vec (A), strides (A), sz)
1326
1331
@test pointer (A) == pointer (S)
1327
1332
for i in 1 : prod (sz)
@@ -1387,6 +1392,7 @@ end
1387
1392
@test Vp[i] == Avp[i] == Svp[i] == Avt[i] == Ava[i] == Svt[i] == Sva[i]
1388
1393
end
1389
1394
end
1395
+ Base. decrement_pin_count! (A)
1390
1396
end
1391
1397
1392
1398
@testset " first/last n elements of $(typeof (itr)) " for itr in (collect (1 : 9 ),
@@ -1915,6 +1921,7 @@ module IRUtils
1915
1921
end
1916
1922
1917
1923
function check_pointer_strides (A:: AbstractArray )
1924
+ Base. increment_pin_count! (A)
1918
1925
# Make sure stride(A, i) is equivalent with strides(A)[i] (if 1 <= i <= ndims(A))
1919
1926
dims = ntuple (identity, ndims (A))
1920
1927
map (i -> stride (A, i), dims) == @inferred (strides (A)) || return false
@@ -1924,6 +1931,7 @@ function check_pointer_strides(A::AbstractArray)
1924
1931
for i in eachindex (IndexLinear (), A)
1925
1932
A[i] === Base. unsafe_load (pointer (A, i)) || return false
1926
1933
end
1934
+ Base. decrement_pin_count! (A)
1927
1935
return true
1928
1936
end
1929
1937
0 commit comments