@@ -33,7 +33,7 @@ namespace JL_I {
33
33
abs_float, copysign_float,
34
34
flipsign_int,
35
35
// pointer access
36
- pointerref, pointerset,
36
+ pointerref, pointerset, pointerany,
37
37
// checked arithmetic
38
38
checked_sadd, checked_uadd, checked_ssub, checked_usub,
39
39
checked_smul, checked_umul,
@@ -493,6 +493,14 @@ static Value *emit_intrinsic(intrinsic f, jl_value_t **args, size_t nargs,
493
493
jl_error (" pointerset: wrong number of arguments" );
494
494
return emit_pointerset (args[1 ], args[2 ], args[3 ], ctx);
495
495
}
496
+ if (f == pointerany) {
497
+ if (nargs != 1 )
498
+ jl_error (" pointerany: wrong number of arguments" );
499
+ if (!jl_is_cpointer_type (expr_type (args[1 ], ctx)))
500
+ jl_error (" pointerany: argument must be pointer type" );
501
+ return builder.CreateBitCast (emit_unboxed (args[1 ], ctx),
502
+ jl_pvalue_llvmt);
503
+ }
496
504
if (nargs < 1 ) jl_error (" invalid intrinsic call" );
497
505
Value *x = auto_unbox (args[1 ], ctx);
498
506
Value *y = NULL ;
@@ -1087,7 +1095,7 @@ extern "C" void jl_init_intrinsic_functions(void)
1087
1095
ADD_I (fptrunc32); ADD_I (fpext64);
1088
1096
ADD_I (abs_float); ADD_I (copysign_float);
1089
1097
ADD_I (flipsign_int);
1090
- ADD_I (pointerref); ADD_I (pointerset);
1098
+ ADD_I (pointerref); ADD_I (pointerset); ADD_I (pointerany);
1091
1099
ADD_I (checked_sadd); ADD_I (checked_uadd);
1092
1100
ADD_I (checked_ssub); ADD_I (checked_usub);
1093
1101
ADD_I (checked_smul); ADD_I (checked_umul);
0 commit comments