diff --git a/src/Sema.zig b/src/Sema.zig index c465d5f81d..d1de0af362 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1897,10 +1897,15 @@ fn resolveMaybeUndefValAllowVariablesMaybeRuntime( } i -= Air.Inst.Ref.typed_value_map.len; + const air_tags = sema.air_instructions.items(.tag); if (try sema.typeHasOnePossibleValue(sema.typeOf(inst))) |opv| { + if (air_tags[i] == .constant) { + const ty_pl = sema.air_instructions.items(.data)[i].ty_pl; + const val = sema.air_values.items[ty_pl.payload]; + if (val.tag() == .variable) return val; + } return opv; } - const air_tags = sema.air_instructions.items(.tag); switch (air_tags[i]) { .constant => { const ty_pl = sema.air_instructions.items(.data)[i].ty_pl; diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig index b0b25d3774..7351891959 100644 --- a/test/behavior/basic.zig +++ b/test/behavior/basic.zig @@ -1118,3 +1118,12 @@ test "ambiguous reference error ignores current declaration" { }; try expect(S.b.foo == 666); } + +test "pointer to zero sized global is mutable" { + const S = struct { + const Thing = struct {}; + + var thing: Thing = undefined; + }; + try expect(@TypeOf(&S.thing) == *S.Thing); +}