Skip to content

Commit

Permalink
make Random.reserve type-stable (fix JuliaLang#20062) (JuliaLang#22446)
Browse files Browse the repository at this point in the history
  • Loading branch information
GregPlowman authored and rfourquet committed Jun 24, 2017
1 parent d040151 commit 7b14c5e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
4 changes: 2 additions & 2 deletions base/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,10 @@ function gen_rand(r::MersenneTwister)
mt_setfull!(r)
end

@inline reserve_1(r::MersenneTwister) = mt_empty(r) && gen_rand(r)
@inline reserve_1(r::MersenneTwister) = (mt_empty(r) && gen_rand(r); nothing)
# `reserve` allows one to call `rand_inbounds` n times
# precondition: n <= MTCacheLength
@inline reserve(r::MersenneTwister, n::Int) = mt_avail(r) < n && gen_rand(r)
@inline reserve(r::MersenneTwister, n::Int) = (mt_avail(r) < n && gen_rand(r); nothing)

# precondition: !mt_empty(r)
@inline rand_inbounds(r::MersenneTwister, ::Type{Close1Open2}) = mt_pop!(r)
Expand Down
6 changes: 6 additions & 0 deletions test/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -537,3 +537,9 @@ let g = Base.Random.GLOBAL_RNG,
@test srand(m, rand(UInt32, rand(1:10))) === m
@test srand(m, rand(1:10)) === m
end

# Issue 20062 - ensure internal functions reserve_1, reserve are type-stable
let r = MersenneTwister(0)
@inferred Base.Random.reserve_1(r)
@inferred Base.Random.reserve(r, 1)
end

0 comments on commit 7b14c5e

Please sign in to comment.