packed structs support comptime bitcasting

* `type_size_store` is no longer a thing. loading and storing a pointer
   to a value may dereference up to `@sizeOf(T)` bytes, even for
   integers such as `u24`.
 * fix `types_have_same_zig_comptime_repr` to not think that the
   same `ZigTypeId` means the `ConstExprValue` neccesarily has the
   same representation.
 * implement `buf_write_value_bytes` and `buf_read_value_bytes` for
   `ContainerLayoutPacked`

closes #1120
This commit is contained in:
Andrew Kelley
2019-02-20 22:40:41 -05:00
parent 079728752e
commit 3ee9d06cbd
8 changed files with 226 additions and 40 deletions

View File

@@ -318,12 +318,12 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
"reading past end of pointer casted array",
\\comptime {
\\ const array = "aoeu";
\\ const slice = array[2..];
\\ const slice = array[1..];
\\ const int_ptr = @ptrCast(*const u24, slice.ptr);
\\ const deref = int_ptr.*;
\\}
,
".tmp_source.zig:5:26: error: attempt to read 3 bytes from [4]u8 at index 2 which is 2 bytes",
".tmp_source.zig:5:26: error: attempt to read 4 bytes from [4]u8 at index 1 which is 3 bytes",
);
cases.add(