diff options
| author | LemonBoy <thatlemon@gmail.com> | 2020-10-28 22:54:10 +0100 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2020-10-29 15:41:45 +0200 |
| commit | b3314a8be6c902c4da3ccef4b29f2ca3ae22061c (patch) | |
| tree | 4e4fbd8c5ba1f036d0bd6172c806e09a5cc2d18b /src/stage1/analyze.cpp | |
| parent | 85dd5746bdcbe655132df61ca4556c72711d12d7 (diff) | |
| download | zig-b3314a8be6c902c4da3ccef4b29f2ca3ae22061c.tar.gz zig-b3314a8be6c902c4da3ccef4b29f2ca3ae22061c.zip | |
stage1: Fix small bug in pointer type analysis
A flag meant to catch recursively-defined types was never reset, leading
the compiler to generate wrong answers when asked for its
type/alignment.
Closes #6850
Diffstat (limited to 'src/stage1/analyze.cpp')
| -rw-r--r-- | src/stage1/analyze.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp index 0da3ec58dc..f942e06cb8 100644 --- a/src/stage1/analyze.cpp +++ b/src/stage1/analyze.cpp @@ -6821,9 +6821,12 @@ static Error resolve_pointer_zero_bits(CodeGen *g, ZigType *ty) { TypeStructField *field = find_struct_type_field(isf->inferred_struct_type, isf->field_name); assert(field != nullptr); if (field->is_comptime) { + ty->data.pointer.resolve_loop_flag_zero_bits = false; + ty->abi_size = 0; ty->size_in_bits = 0; ty->abi_align = 0; + return ErrorNone; } elem_type = field->type_entry; @@ -6835,6 +6838,8 @@ static Error resolve_pointer_zero_bits(CodeGen *g, ZigType *ty) { if ((err = type_has_bits2(g, elem_type, &has_bits))) return err; + ty->data.pointer.resolve_loop_flag_zero_bits = false; + if (has_bits) { ty->abi_size = g->builtin_types.entry_usize->abi_size; ty->size_in_bits = g->builtin_types.entry_usize->size_in_bits; |
