aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2020-02-05 20:31:18 +0100
committerLemonBoy <thatlemon@gmail.com>2020-02-05 20:31:18 +0100
commit21932a0ef25a7055cd3c0850fa58c2fda2ba383b (patch)
treebc154b72c1162381e4d0b560b43e68507b442997 /src/ir.cpp
parentb022db16ece48f2cdec47c5716601fec2fc07ef4 (diff)
downloadzig-21932a0ef25a7055cd3c0850fa58c2fda2ba383b.tar.gz
zig-21932a0ef25a7055cd3c0850fa58c2fda2ba383b.zip
Fix edge case in cast between fn with varargs
* Prevent the next_param_index to become greater than the param_count one as it's expected by every other function. * Fix a typo in a error message. Closes #4381
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index ef3426d111..0687d18ef2 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -11864,7 +11864,7 @@ static ConstCastOnly types_match_const_cast_only(IrAnalyze *ira, ZigType *wanted
}
assert(wanted_type->data.fn.is_generic ||
wanted_type->data.fn.fn_type_id.next_param_index == wanted_type->data.fn.fn_type_id.param_count);
- for (size_t i = 0; i < wanted_type->data.fn.fn_type_id.next_param_index; i += 1) {
+ for (size_t i = 0; i < wanted_type->data.fn.fn_type_id.param_count; i += 1) {
// note it's reversed for parameters
FnTypeParamInfo *actual_param_info = &actual_type->data.fn.fn_type_id.param_info[i];
FnTypeParamInfo *expected_param_info = &wanted_type->data.fn.fn_type_id.param_info[i];
@@ -30285,7 +30285,7 @@ static ZigType *ir_resolve_lazy_fn_type(IrAnalyze *ira, AstNode *source_node, La
if (param_is_var_args) {
if (fn_type_id.cc == CallingConventionC) {
fn_type_id.param_count = fn_type_id.next_param_index;
- continue;
+ break;
} else if (fn_type_id.cc == CallingConventionUnspecified) {
return get_generic_fn_type(ira->codegen, &fn_type_id);
} else {