Skip to content

Commit 3ed13ea

Browse files
fix null comparisons for non-standard address spaces (#58837)
Co-authored-by: Jameson Nash <vtjnash@gmail.com>
1 parent 34bb3e7 commit 3ed13ea

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/cgutils.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1601,10 +1601,17 @@ static void undef_var_error_ifnot(jl_codectx_t &ctx, Value *ok, jl_sym_t *name,
16011601
ctx.builder.SetInsertPoint(ifok);
16021602
}
16031603

1604+
// ctx.builder.CreateIsNotNull(v) lowers incorrectly in non-standard
1605+
// address spaces where null is not zero
1606+
// TODO: adapt to https://github.com/llvm/llvm-project/pull/131557 once merged
16041607
static Value *null_pointer_cmp(jl_codectx_t &ctx, Value *v)
16051608
{
16061609
++EmittedNullchecks;
1607-
return ctx.builder.CreateIsNotNull(v);
1610+
Type *T = v->getType();
1611+
return ctx.builder.CreateICmpNE(
1612+
v,
1613+
ctx.builder.CreateAddrSpaceCast(
1614+
Constant::getNullValue(ctx.builder.getPtrTy(0)), T));
16081615
}
16091616

16101617

0 commit comments

Comments
 (0)