diff options
| author | Robin Voetter <robin@voetter.nl> | 2021-10-26 00:51:46 +0200 |
|---|---|---|
| committer | Robin Voetter <robin@voetter.nl> | 2021-10-26 01:24:14 +0200 |
| commit | 21bf3b80666c14c9b2a2e1ec984a6b4bb23a5bb7 (patch) | |
| tree | 36e906cf5c4a40a715ed53f058feaccacf73ab8a /src/codegen | |
| parent | 4eb7b28700b23d8465a36e364e60394b2a1da41b (diff) | |
| download | zig-21bf3b80666c14c9b2a2e1ec984a6b4bb23a5bb7.tar.gz zig-21bf3b80666c14c9b2a2e1ec984a6b4bb23a5bb7.zip | |
stage2: runtime c pointer null comparison
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/llvm.zig | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 646633a90d..1a4bada192 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2450,6 +2450,12 @@ pub const FuncGen = struct { const operand = try self.resolveInst(un_op); const operand_ty = self.air.typeOf(un_op); const optional_ty = if (operand_is_ptr) operand_ty.childType() else operand_ty; + if (optional_ty.isPtrLikeOptional()) { + const optional_llvm_ty = try self.dg.llvmType(optional_ty); + const loaded = if (operand_is_ptr) self.builder.buildLoad(operand, "") else operand; + return self.builder.buildICmp(pred, loaded, optional_llvm_ty.constNull(), ""); + } + var buf: Type.Payload.ElemType = undefined; const payload_ty = optional_ty.optionalChild(&buf); if (!payload_ty.hasCodeGenBits()) { @@ -2459,11 +2465,6 @@ pub const FuncGen = struct { return operand; } } - if (optional_ty.isPtrLikeOptional()) { - const optional_llvm_ty = try self.dg.llvmType(optional_ty); - const loaded = if (operand_is_ptr) self.builder.buildLoad(operand, "") else operand; - return self.builder.buildICmp(pred, loaded, optional_llvm_ty.constNull(), ""); - } if (operand_is_ptr or isByRef(optional_ty)) { const index_type = self.context.intType(32); |
