fix peer result loc fn call with comptime condition

This commit is contained in:
Andrew Kelley 2019-06-19 23:52:51 -04:00
parent 6217b401f9
commit 3c541d7be3
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
3 changed files with 23 additions and 23 deletions

View File

@ -16004,7 +16004,7 @@ static IrInstruction *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCallSrc *c
IrInstruction *result_loc;
if (handle_is_ptr(impl_fn_type_id->return_type)) {
result_loc = ir_resolve_result(ira, &call_instruction->base, call_instruction->result_loc,
impl_fn_type_id->return_type, nullptr, true, false);
impl_fn_type_id->return_type, nullptr, true, true);
if (type_is_invalid(result_loc->value.type) || instr_is_unreachable(result_loc)) {
return result_loc;
}
@ -16124,7 +16124,7 @@ static IrInstruction *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCallSrc *c
IrInstruction *result_loc;
if (handle_is_ptr(return_type)) {
result_loc = ir_resolve_result(ira, &call_instruction->base, call_instruction->result_loc,
return_type, nullptr, true, false);
return_type, nullptr, true, true);
if (type_is_invalid(result_loc->value.type) || instr_is_unreachable(result_loc)) {
return result_loc;
}

View File

@ -76,7 +76,7 @@ comptime {
_ = @import("behavior/sizeof_and_typeof.zig");
_ = @import("behavior/slice.zig");
_ = @import("behavior/slicetobytes.zig");
_ = @import("behavior/struct.zig"); // TODO
_ = @import("behavior/struct.zig");
_ = @import("behavior/struct_contains_null_ptr_itself.zig");
_ = @import("behavior/struct_contains_slice_of_itself.zig");
_ = @import("behavior/switch.zig");

View File

@ -529,26 +529,26 @@ test "access to global struct fields" {
expect(g_foo.bar.value == 42);
}
//test "packed struct with fp fields" {
// const S = packed struct {
// data: [3]f32,
//
// pub fn frob(self: *@This()) void {
// self.data[0] += self.data[1] + self.data[2];
// self.data[1] += self.data[0] + self.data[2];
// self.data[2] += self.data[0] + self.data[1];
// }
// };
//
// var s: S = undefined;
// s.data[0] = 1.0;
// s.data[1] = 2.0;
// s.data[2] = 3.0;
// s.frob();
// expectEqual(f32(6.0), s.data[0]);
// expectEqual(f32(11.0), s.data[1]);
// expectEqual(f32(20.0), s.data[2]);
//}
test "packed struct with fp fields" {
const S = packed struct {
data: [3]f32,
pub fn frob(self: *@This()) void {
self.data[0] += self.data[1] + self.data[2];
self.data[1] += self.data[0] + self.data[2];
self.data[2] += self.data[0] + self.data[1];
}
};
var s: S = undefined;
s.data[0] = 1.0;
s.data[1] = 2.0;
s.data[2] = 3.0;
s.frob();
expectEqual(f32(6.0), s.data[0]);
expectEqual(f32(11.0), s.data[1]);
expectEqual(f32(20.0), s.data[2]);
}
test "use within struct scope" {
const S = struct {