diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-11-09 11:30:39 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-11-09 11:30:39 -0500 |
| commit | 7ea669e04c9314f17ce296c7521ffec2ff8575e9 (patch) | |
| tree | 4e272dd83789bc4f24506f960c6e0486d6ce6cfa /src/ir.cpp | |
| parent | 4f8c26d2c605f24cdeb1a4c7154662b2552640ef (diff) | |
| download | zig-7ea669e04c9314f17ce296c7521ffec2ff8575e9.tar.gz zig-7ea669e04c9314f17ce296c7521ffec2ff8575e9.zip | |
fix parameter of extern var args not type checked
closes #601
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 1d63677024..901ba47b76 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -10311,8 +10311,17 @@ static TypeTableEntry *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCall *cal { FnTypeId *fn_type_id = &fn_type->data.fn.fn_type_id; size_t first_arg_1_or_0 = first_arg_ptr ? 1 : 0; - size_t var_args_1_or_0 = fn_type_id->is_var_args ? 1 : 0; + + // for extern functions, the var args argument is not counted. + // for zig functions, it is. + size_t var_args_1_or_0; + if (fn_type_id->cc == CallingConventionUnspecified) { + var_args_1_or_0 = fn_type_id->is_var_args ? 1 : 0; + } else { + var_args_1_or_0 = 0; + } size_t src_param_count = fn_type_id->param_count - var_args_1_or_0; + size_t call_param_count = call_instruction->arg_count + first_arg_1_or_0; AstNode *source_node = call_instruction->base.source_node; |
