aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-09-11 15:54:38 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-09-11 15:56:04 -0400
commit4af844732a88393b172d33676732580b056910f6 (patch)
tree32a05bfbf51e9f8fc0339ca44658e04c21345788 /src/ir.cpp
parent67735c6f1557092efe6e8c1712445c30655fe283 (diff)
parent7dd3c3814de0caf808bc112aa07044cdd8bba135 (diff)
downloadzig-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.cpp11
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(&param_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(&param_type->name), calling_convention_name(fn_type_id.cc)));
+ return ira->codegen->builtin_types.entry_invalid;
+ }
param_info->type = param_type;
}