diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-09-11 15:54:38 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-09-11 15:56:04 -0400 |
| commit | 4af844732a88393b172d33676732580b056910f6 (patch) | |
| tree | 32a05bfbf51e9f8fc0339ca44658e04c21345788 /src/ir.cpp | |
| parent | 67735c6f1557092efe6e8c1712445c30655fe283 (diff) | |
| parent | 7dd3c3814de0caf808bc112aa07044cdd8bba135 (diff) | |
| download | zig-4af844732a88393b172d33676732580b056910f6.tar.gz zig-4af844732a88393b172d33676732580b056910f6.zip | |
Merge remote-tracking branch 'origin/master' into stage1-caching
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index bfe21f974d..858a6df33c 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -13107,8 +13107,7 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction, assert(ira->codegen->errors.length != 0); return ira->codegen->invalid_instruction; } - assert(var->value->type); - if (type_is_invalid(var->value->type)) + if (var->value->type == nullptr || type_is_invalid(var->value->type)) return ira->codegen->invalid_instruction; bool comptime_var_mem = ir_get_var_is_comptime(var); @@ -19643,7 +19642,7 @@ static ZigType *ir_analyze_instruction_fn_proto(IrAnalyze *ira, IrInstructionFnP return ira->codegen->builtin_types.entry_invalid; if (type_requires_comptime(param_type)) { if (!calling_convention_allows_zig_types(fn_type_id.cc)) { - ir_add_error(ira, &instruction->base, + ir_add_error(ira, param_type_value, buf_sprintf("parameter of type '%s' not allowed in function with calling convention '%s'", buf_ptr(¶m_type->name), calling_convention_name(fn_type_id.cc))); return ira->codegen->builtin_types.entry_invalid; @@ -19654,6 +19653,12 @@ static ZigType *ir_analyze_instruction_fn_proto(IrAnalyze *ira, IrInstructionFnP out_val->data.x_type = get_generic_fn_type(ira->codegen, &fn_type_id); return ira->codegen->builtin_types.entry_type; } + if (!type_has_bits(param_type) && !calling_convention_allows_zig_types(fn_type_id.cc)) { + ir_add_error(ira, param_type_value, + buf_sprintf("parameter of type '%s' has 0 bits; not allowed in function with calling convention '%s'", + buf_ptr(¶m_type->name), calling_convention_name(fn_type_id.cc))); + return ira->codegen->builtin_types.entry_invalid; + } param_info->type = param_type; } |
