Commit 2f07d76eee
src/type.zig
@@ -3118,8 +3118,14 @@ pub const Type = extern union {
=> return null,
.@"struct" => {
- log.warn("TODO implement Type.onePossibleValue for structs", .{});
- return null;
+ const s = ty.castTag(.@"struct").?.data;
+ for (s.fields.entries.items) |entry| {
+ const field_ty = entry.value.ty;
+ if (field_ty.onePossibleValue() == null) {
+ return null;
+ }
+ }
+ return Value.initTag(.empty_struct_value);
},
.empty_struct, .empty_struct_literal => return Value.initTag(.empty_struct_value),
test/stage2/cbe.zig
@@ -524,6 +524,16 @@ pub fn addCases(ctx: *TestContext) !void {
":6:10: error: no field named 'z' in struct 'Point'",
":1:15: note: 'Point' declared here",
});
+ case.addCompareOutput(
+ \\const Point = struct { x: i32, y: i32 };
+ \\export fn main() c_int {
+ \\ var p: Point = .{
+ \\ .x = 12,
+ \\ .y = 24,
+ \\ };
+ \\ return p.y - p.x - p.x;
+ \\}
+ , "");
}
ctx.c("empty start function", linux_x64,