Skip to content

Commit ede8b47

Browse files
committed
Revert "in unsafe_ref, special case Any to fix #2458"
This reverts commit e8d6ba3.
1 parent 98f57c3 commit ede8b47

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

base/pointer.jl

+2-8
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,21 @@ convert(::Type{Ptr{Uint8}}, s::ByteString) = convert(Ptr{Uint8}, s.data)
2020

2121
pointer{T}(::Type{T}, x::Uint) = convert(Ptr{T}, x)
2222
pointer{T}(::Type{T}, x::Ptr) = convert(Ptr{T}, x)
23-
pointer(::Type{Any}, x::Uint) = convert(Ptr{Ptr{Any}}, x)
24-
pointer(::Type{Any}, x::Ptr) = convert(Ptr{Ptr{Any}}, x)
2523
# note: these definitions don't mean any AbstractArray is convertible to
2624
# pointer. they just map the array element type to the pointer type for
2725
# convenience in cases that work.
2826
pointer{T}(x::AbstractArray{T}) = convert(Ptr{T},x)
29-
pointer(x::AbstractArray{Any}) = convert(Ptr{Ptr{Any}},x)
3027
pointer{T}(x::AbstractArray{T}, i::Int) = convert(Ptr{T},x) + (i-1)*sizeof(T)
31-
pointer{T}(x::AbstractArray{Any}, i::Int) = convert(Ptr{Ptr{Any}},x) + (i-1)*sizeof(T)
3228

3329
# unsafe pointer to array conversions
3430
pointer_to_array(p, dims) = pointer_to_array(p, dims, false)
3531
function pointer_to_array{T,N}(p::Ptr{T}, dims::NTuple{N,Int}, own::Bool)
3632
ccall(:jl_ptr_to_array, Array{T,N}, (Any, Ptr{T}, Any, Int32),
3733
Array{T,N}, p, dims, own)
3834
end
39-
unsafe_ref(p::Ptr, i::Integer) = pointerref(p, int(i))
40-
unsafe_ref(p::Ptr{Ptr{Any}}, i::Integer) = pointerref(pointerref(p, int(i)), 1)
35+
unsafe_ref(p::Ptr,i::Integer) = pointerref(p, int(i))
4136
unsafe_ref(p::Ptr) = unsafe_ref(p, 1)
42-
unsafe_assign(p::Ptr{Any}, x, i::Integer) = error("cannot unsafe_assign to contents of type Any")
43-
unsafe_assign(p::Ptr{Ptr{Any}}, x::ANY, i::Integer) = pointerset(convert(Ptr{Any},p), x, int(i))
37+
unsafe_assign(p::Ptr{Any}, x::ANY, i::Integer) = pointerset(p, x, int(i))
4438
unsafe_assign{T}(p::Ptr{T}, x, i::Integer) = pointerset(p, convert(T, x), int(i))
4539
unsafe_assign{T}(p::Ptr{T}, x) = unsafe_assign(p, convert(T,x), 1)
4640

src/intrinsics.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,9 @@ static Value *emit_pointerref(jl_value_t *e, jl_value_t *i, jl_codectx_t *ctx)
406406
Value *im1 = builder.CreateSub(idx, ConstantInt::get(T_size, 1));
407407
if (!jl_is_bitstype(ety)) {
408408
if (ety == (jl_value_t*)jl_any_type)
409-
return builder.CreateGEP(builder.CreateBitCast(thePtr, jl_pvalue_llvmt), im1);
409+
return builder.CreateLoad(builder.CreateGEP(
410+
builder.CreateBitCast(thePtr, jl_ppvalue_llvmt),
411+
im1));
410412
if (!jl_is_structtype(ety) || jl_is_array_type(ety) || !jl_is_leaf_type(ety))
411413
jl_error("pointerref: invalid pointer type");
412414
uint64_t size = ((jl_datatype_t*)ety)->size;

0 commit comments

Comments
 (0)