diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-08-26 10:43:07 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-08-26 10:43:07 -0400 |
| commit | e1a4bcbdfd338d85f55aa8da318e203b299a2b91 (patch) | |
| tree | 4daacb85e4125b6c5f18684cb7f69b8c0395ecb4 /src/analyze.cpp | |
| parent | ede0c22a6796600cfc4555e9ac2f0481c41c290a (diff) | |
| download | zig-e1a4bcbdfd338d85f55aa8da318e203b299a2b91.tar.gz zig-e1a4bcbdfd338d85f55aa8da318e203b299a2b91.zip | |
fix dependency loop errors with zig build
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index fc9607e264..87e40b3670 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -983,7 +983,9 @@ static Error type_val_resolve_zero_bits(CodeGen *g, ConstExprValue *type_val, Zi if ((type_val->data.x_type->id == ZigTypeIdStruct && type_val->data.x_type->data.structure.resolve_loop_flag_zero_bits) || (type_val->data.x_type->id == ZigTypeIdUnion && - type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits)) + type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits) || + (type_val->data.x_type->id == ZigTypeIdPointer && + type_val->data.x_type->data.pointer.resolve_loop_flag_zero_bits)) { // Does a struct/union which contains a pointer field to itself have bits? Yes. *is_zero_bits = false; @@ -1105,6 +1107,10 @@ Error type_val_resolve_abi_align(CodeGen *g, ConstExprValue *type_val, uint32_t if (type_val->special != ConstValSpecialLazy) { assert(type_val->special == ConstValSpecialStatic); ZigType *ty = type_val->data.x_type; + if (ty->id == ZigTypeIdPointer) { + *abi_align = g->builtin_types.entry_usize->abi_align; + return ErrorNone; + } if ((err = type_resolve(g, ty, ResolveStatusAlignmentKnown))) return err; *abi_align = ty->abi_align; @@ -5611,6 +5617,14 @@ static Error resolve_pointer_zero_bits(CodeGen *g, ZigType *ty) { if (ty->abi_size != SIZE_MAX) return ErrorNone; + if (ty->data.pointer.resolve_loop_flag_zero_bits) { + ty->abi_size = g->builtin_types.entry_usize->abi_size; + ty->size_in_bits = g->builtin_types.entry_usize->size_in_bits; + ty->abi_align = g->builtin_types.entry_usize->abi_align; + return ErrorNone; + } + ty->data.pointer.resolve_loop_flag_zero_bits = true; + ZigType *elem_type = ty->data.pointer.child_type; if ((err = type_resolve(g, elem_type, ResolveStatusZeroBitsKnown))) |
