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:
| M | src/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();