ability to use a struct with no fields
This commit is contained in:
parent
ae600d2f7f
commit
a380b803ac
@ -2219,7 +2219,8 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry
|
||||
return container_type;
|
||||
} else if (container_type->id == TypeTableEntryIdStruct &&
|
||||
!container_type->data.structure.is_unknown_size_array &&
|
||||
kind == ContainerInitKindStruct)
|
||||
(kind == ContainerInitKindStruct || (kind == ContainerInitKindArray &&
|
||||
container_init_expr->entries.length == 0)))
|
||||
{
|
||||
StructValExprCodeGen *codegen = &container_init_expr->resolved_struct_val_expr;
|
||||
codegen->type_entry = container_type;
|
||||
|
@ -801,14 +801,16 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) {
|
||||
gen_param_values[gen_param_index] = node->data.fn_call_expr.tmp_ptr;
|
||||
gen_param_index += 1;
|
||||
}
|
||||
if (struct_type) {
|
||||
if (struct_type && type_has_bits(struct_type)) {
|
||||
gen_param_values[gen_param_index] = gen_expr(g, first_param_expr);
|
||||
assert(gen_param_values[gen_param_index]);
|
||||
gen_param_index += 1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < fn_call_param_count; i += 1) {
|
||||
AstNode *expr_node = node->data.fn_call_expr.params.at(i);
|
||||
LLVMValueRef param_value = gen_expr(g, expr_node);
|
||||
assert(param_value);
|
||||
TypeTableEntry *param_type = get_expr_type(expr_node);
|
||||
if (is_var_args || type_has_bits(param_type)) {
|
||||
gen_param_values[gen_param_index] = param_value;
|
||||
|
@ -1285,3 +1285,13 @@ fn mangle_string(s: []u8) {
|
||||
*c += 1;
|
||||
}
|
||||
}
|
||||
|
||||
#attribute("test")
|
||||
fn empty_struct_method_call() {
|
||||
const es = EmptyStruct{};
|
||||
assert(es.method() == 1234);
|
||||
}
|
||||
struct EmptyStruct {
|
||||
#static_eval_enable(false)
|
||||
fn method(es: EmptyStruct) -> i32 { 1234 }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user