From 510b891d271bc69c64e4be8b3e008c8a51a235e7 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 16 Nov 2022 19:13:31 +0200 Subject: [PATCH] Sema: handle `opt_payload` in `beginComptimePtrLoad` --- src/Sema.zig | 4 ++++ test/behavior/type_info.zig | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/Sema.zig b/src/Sema.zig index 5151904f0b..90de77a57e 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -26555,6 +26555,10 @@ fn beginComptimePtrLoad( .null_value => { return sema.fail(block, src, "attempt to use null value", .{}); }, + .opt_payload => blk: { + const opt_payload = ptr_val.castTag(.opt_payload).?.data; + break :blk try sema.beginComptimePtrLoad(block, src, opt_payload, null); + }, .zero, .one, diff --git a/test/behavior/type_info.zig b/test/behavior/type_info.zig index 80a3c7210a..af1b740834 100644 --- a/test/behavior/type_info.zig +++ b/test/behavior/type_info.zig @@ -565,3 +565,10 @@ test "typeInfo resolves usingnamespace declarations" { try expect(@typeInfo(B).Struct.decls.len == 2); //a } + +test "value from struct @typeInfo default_value can be loaded at comptime" { + comptime { + const a = @typeInfo(@TypeOf(.{ .foo = @as(u8, 1) })).Struct.fields[0].default_value; + try expect(@ptrCast(*const u8, a).* == 1); + } +}