diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-26 13:46:27 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-26 13:46:27 -0700 |
| commit | c6b3d06535f4227541c13fe75da347a485abdb4f (patch) | |
| tree | 8f0a730e1dc7619168a81d2cd4521db1e7a1b4b6 /src/codegen/llvm.zig | |
| parent | 6df26a37d13d21be061a1cccd39dd17e46a81322 (diff) | |
| download | zig-c6b3d06535f4227541c13fe75da347a485abdb4f.tar.gz zig-c6b3d06535f4227541c13fe75da347a485abdb4f.zip | |
Sema: improved C pointers and casting
* C pointer types always have allowzero set to true but they omit the
word allowzero when printed.
* Implement coercion from C pointers to other pointers.
* Implement in-memory coercion for slices and pointer-like optionals.
* Make slicing a C pointer drop the allowzero bit.
* Value representation for pointer-like optionals is now allowed to use
pointer tag values in addition to the `opt_payload` tag.
Diffstat (limited to 'src/codegen/llvm.zig')
| -rw-r--r-- | src/codegen/llvm.zig | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index ca9e973354..fd92dec413 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -1184,6 +1184,8 @@ pub const DeclGen = struct { if (tv.ty.isPtrLikeOptional()) { if (tv.val.castTag(.opt_payload)) |payload| { return self.genTypedValue(.{ .ty = payload_ty, .val = payload.data }); + } else if (is_pl) { + return self.genTypedValue(.{ .ty = payload_ty, .val = tv.val }); } else { const llvm_ty = try self.llvmType(tv.ty); return llvm_ty.constNull(); |
