diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-22 16:23:34 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-22 16:23:34 -0700 |
| commit | b24e9b6347afc66aa94f61b3ed4c2d02cdb0d0ee (patch) | |
| tree | 7a9d2af51b046c8422facc14377b99a210250787 /src/codegen/llvm.zig | |
| parent | f0dcdd7931f1eb4f3b6a0a87c914baf770f6df03 (diff) | |
| download | zig-b24e9b6347afc66aa94f61b3ed4c2d02cdb0d0ee.tar.gz zig-b24e9b6347afc66aa94f61b3ed4c2d02cdb0d0ee.zip | |
Sema: fix a couple use-after-free bugs
Also switch to the more efficient encoding of the bitcast instruction
when the destination type is anyerror in 2 common cases.
LLVM backend: fix using the wrong type as the optional payload type in
the `wrap_optional` AIR instruction.
Diffstat (limited to 'src/codegen/llvm.zig')
| -rw-r--r-- | src/codegen/llvm.zig | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 1fd75b5180..d6b41208f2 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2598,9 +2598,9 @@ pub const FuncGen = struct { if (self.liveness.isUnused(inst)) return null; const ty_op = self.air.instructions.items(.data)[inst].ty_op; - const operand_ty = self.air.typeOf(ty_op.operand); + const payload_ty = self.air.typeOf(ty_op.operand); const non_null_bit = self.context.intType(1).constAllOnes(); - if (!operand_ty.hasCodeGenBits()) return non_null_bit; + if (!payload_ty.hasCodeGenBits()) return non_null_bit; const operand = try self.resolveInst(ty_op.operand); const optional_ty = self.air.typeOfIndex(inst); if (optional_ty.isPtrLikeOptional()) return operand; @@ -2608,8 +2608,6 @@ pub const FuncGen = struct { if (isByRef(optional_ty)) { const optional_ptr = self.buildAlloca(llvm_optional_ty); const payload_ptr = self.builder.buildStructGEP(optional_ptr, 0, ""); - var buf: Type.Payload.ElemType = undefined; - const payload_ty = operand_ty.optionalChild(&buf); var ptr_ty_payload: Type.Payload.ElemType = .{ .base = .{ .tag = .single_mut_pointer }, .data = payload_ty, |
