diff options
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a0e6b33df..5d4d6c73b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1193,21 +1193,20 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ Type *y = dst; bool same_inputs = are_types_identical_internal(x->Proc.params, y->Proc.params, false); bool same_outputs = are_types_identical_internal(x->Proc.results, y->Proc.results, false); - if (same_inputs && same_outputs) { - if (x->Proc.calling_convention != y->Proc.calling_convention) { - gbString s_expected = type_to_string(y); - gbString s_got = type_to_string(x); - - error_line("\tNote: The calling conventions differ between the procedure signature types\n"); - error_line("\t Expected \"%s\", got \"%s\"\n", - proc_calling_convention_strings[y->Proc.calling_convention], - proc_calling_convention_strings[x->Proc.calling_convention]); - error_line("\t Expected: %s\n", s_expected); - error_line("\t Got: %s\n", s_got); - gb_string_free(s_got); - gb_string_free(s_expected); - } - } else if (same_inputs) { + if (same_inputs && same_outputs && + x->Proc.calling_convention != y->Proc.calling_convention) { + gbString s_expected = type_to_string(y); + gbString s_got = type_to_string(x); + + error_line("\tNote: The calling conventions differ between the procedure signature types\n"); + error_line("\t Expected \"%s\", got \"%s\"\n", + proc_calling_convention_strings[y->Proc.calling_convention], + proc_calling_convention_strings[x->Proc.calling_convention]); + error_line("\t Expected: %s\n", s_expected); + error_line("\t Got: %s\n", s_got); + gb_string_free(s_got); + gb_string_free(s_expected); + } else if (same_inputs && !same_outputs) { gbString s_expected = type_to_string(y->Proc.results); gbString s_got = type_to_string(x->Proc.results); error_line("\tNote: The return types differ between the procedure signature types\n"); @@ -1215,7 +1214,7 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ error_line("\t Got: %s\n", s_got); gb_string_free(s_got); gb_string_free(s_expected); - } else if (same_outputs) { + } else if (!same_inputs && same_outputs) { gbString s_expected = type_to_string(y->Proc.params); gbString s_got = type_to_string(x->Proc.params); error_line("\tNote: The input parameter types differ between the procedure signature types\n"); |