fix anon literal used with return result loc
This commit is contained in:
parent
d4e6a6d5e2
commit
1bca8e693d
@ -6151,7 +6151,11 @@ static IrInstruction *ir_gen_container_init_expr(IrBuilder *irb, Scope *scope, A
|
|||||||
init_array_type_source_node = container_type->source_node;
|
init_array_type_source_node = container_type->source_node;
|
||||||
} else {
|
} else {
|
||||||
child_result_loc = parent_result_loc;
|
child_result_loc = parent_result_loc;
|
||||||
|
if (parent_result_loc->source_instruction != nullptr) {
|
||||||
init_array_type_source_node = parent_result_loc->source_instruction->source_node;
|
init_array_type_source_node = parent_result_loc->source_instruction->source_node;
|
||||||
|
} else {
|
||||||
|
init_array_type_source_node = node;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
@ -15935,6 +15939,10 @@ static IrInstruction *ir_analyze_instruction_resolve_result(IrAnalyze *ira,
|
|||||||
instruction->result_loc->source_instruction->child);
|
instruction->result_loc->source_instruction->child);
|
||||||
if (type_is_invalid(implicit_elem_type))
|
if (type_is_invalid(implicit_elem_type))
|
||||||
return ira->codegen->invalid_instruction;
|
return ira->codegen->invalid_instruction;
|
||||||
|
} else if (instruction->result_loc->id == ResultLocIdReturn) {
|
||||||
|
implicit_elem_type = ira->explicit_return_type;
|
||||||
|
if (type_is_invalid(implicit_elem_type))
|
||||||
|
return ira->codegen->invalid_instruction;
|
||||||
} else {
|
} else {
|
||||||
Buf *bare_name = buf_alloc();
|
Buf *bare_name = buf_alloc();
|
||||||
Buf *name = get_anon_type_name(ira->codegen, nullptr, container_string(ContainerKindStruct),
|
Buf *name = get_anon_type_name(ira->codegen, nullptr, container_string(ContainerKindStruct),
|
||||||
|
@ -559,10 +559,14 @@ test "anonymous union literal syntax" {
|
|||||||
|
|
||||||
fn doTheTest() void {
|
fn doTheTest() void {
|
||||||
var i: Number = .{.int = 42};
|
var i: Number = .{.int = 42};
|
||||||
var f: Number = .{.float = 12.34};
|
var f = makeNumber();
|
||||||
expect(i.int == 42);
|
expect(i.int == 42);
|
||||||
expect(f.float == 12.34);
|
expect(f.float == 12.34);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn makeNumber() Number {
|
||||||
|
return .{.float = 12.34};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
S.doTheTest();
|
S.doTheTest();
|
||||||
comptime S.doTheTest();
|
comptime S.doTheTest();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user