zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 561565fa81e4107f50b8cbdcc00ec0fa2ee4de15 (tree)
parent d569e37cb538d17d009f5632c25acd643d3736cb
Author: LemonBoy <thatlemon@gmail.com>
Date:   Sun, 13 Dec 2020 20:27:04 +0100

stage1: Fix crash in can_mutate_comptime_var_state

No lazy value can mutate global state, no need to resolve them.

Closes #7426

Diffstat:
Msrc/stage1/analyze.cpp | 22++++++++++++++++++++++
1 file changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp @@ -5749,6 +5749,28 @@ static bool can_mutate_comptime_var_state(ZigValue *value) { assert(value != nullptr); if (value->special == ConstValSpecialUndef) return false; + + if (value->special == ConstValSpecialLazy) { + // No lazy value has side effects. + // Use a switch here to get a compile error whenever a new kind of lazy + // value is added. + switch (value->data.x_lazy->id) { + case LazyValueIdInvalid: + zig_unreachable(); + + case LazyValueIdAlignOf: + case LazyValueIdSizeOf: + case LazyValueIdPtrType: + case LazyValueIdOptType: + case LazyValueIdSliceType: + case LazyValueIdFnType: + case LazyValueIdErrUnionType: + case LazyValueIdArrayType: + case LazyValueIdTypeInfoDecls: + return false; + } + } + switch (value->type->id) { case ZigTypeIdInvalid: zig_unreachable();