authorgravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-02-27 01:53:56-07:00
committergravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-02-27 01:58:37-07:00
logb52948444f16c082f0e29bb75b246370c4b11326
treea11b00ef2970fc7d29ff684b004aabf9f74ceb7d
parent4d658f83ed3893cf950615e9f58c2b533525b71d

stage2: Resolve union layout before getting tag type in zirTagname

This bug only causes a failure on my machine when running test/behavior/eval.zig directly. If running the full behavior test suite, std.builtin.TypeInfo will have already resolved its layout, causing the test to pass. I'd love to add a test that can reliably reproduce this problem, but I'm afraid I'm not sure how to reliably create a union with un-resolved layout.

1 files changed, 1 insertions(+), 0 deletions(-)

src/Sema.zig+1
...@@ -11837,6 +11837,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air...@@ -11837,6 +11837,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
11837 const operand = sema.resolveInst(inst_data.operand);11837 const operand = sema.resolveInst(inst_data.operand);
11838 const operand_ty = sema.typeOf(operand);11838 const operand_ty = sema.typeOf(operand);
1183911839
11840 try sema.resolveTypeLayout(block, operand_src, operand_ty);
11840 const enum_ty = switch (operand_ty.zigTypeTag()) {11841 const enum_ty = switch (operand_ty.zigTypeTag()) {
11841 .EnumLiteral => {11842 .EnumLiteral => {
11842 const val = try sema.resolveConstValue(block, operand_src, operand);11843 const val = try sema.resolveConstValue(block, operand_src, operand);