Skip to content

Commit b145dbe

Browse files
committed
fix #2468, fix #2458 (add support for unsafe_ref(::Ptr{Any}))
1 parent 2f46ffd commit b145dbe

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

src/intrinsics.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,10 @@ static Value *emit_pointerref(jl_value_t *e, jl_value_t *i, jl_codectx_t *ctx)
405405
Value *idx = emit_unbox(T_size, T_psize, emit_unboxed(i, ctx));
406406
Value *im1 = builder.CreateSub(idx, ConstantInt::get(T_size, 1));
407407
if (!jl_is_bitstype(ety)) {
408+
if (ety == (jl_value_t*)jl_any_type)
409+
return builder.CreateLoad(builder.CreateGEP(
410+
builder.CreateBitCast(thePtr, jl_ppvalue_llvmt),
411+
im1));
408412
if (!jl_is_structtype(ety) || jl_is_array_type(ety) || !jl_is_leaf_type(ety))
409413
jl_error("pointerref: invalid pointer type");
410414
uint64_t size = ((jl_datatype_t*)ety)->size;

test/core.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ begin
468468
@test a == [11,99,13]
469469
a2 = Any[101,102,103]
470470
p2 = pointer(a2)
471-
@test_fails unsafe_ref(p2) == 101
471+
@test unsafe_ref(p2) == 101
472472
@test_fails unsafe_assign(p2, 909, 3)
473473
@test a2 == [101,102,103]
474474
end

0 commit comments

Comments
 (0)