gingerBill 1 year ago
parent
commit
6da6393735
1 changed files with 10 additions and 9 deletions
  1. 10 9
      src/check_expr.cpp

+ 10 - 9
src/check_expr.cpp

@@ -1174,6 +1174,16 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ
 				      type_str, type_extra,
 				      LIT(context_name));
 				check_assignment_error_suggestion(c, operand, type);
+
+				if (context_name == "procedure argument") {
+					Type *src = base_type(operand->type);
+					Type *dst = base_type(type);
+					if (is_type_slice(src) && are_types_identical(src->Slice.elem, dst)) {
+						gbString a = expr_to_string(operand->expr);
+						error_line("\tSuggestion: Did you mean to pass the slice into the variadic parameter with ..%s?\n\n", a);
+						gb_string_free(a);
+					}
+				}
 			}
 			break;
 		}
@@ -5905,16 +5915,7 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
 				s = assign_score_function(MAXIMUM_TYPE_DISTANCE);
 			} else {
 				if (show_error) {
-					ERROR_BLOCK();
 					check_assignment(c, o, param_type, str_lit("procedure argument"));
-
-					Type *src = base_type(o->type);
-					Type *dst = base_type(param_type);
-					if (is_type_slice(src) && are_types_identical(src->Slice.elem, dst)) {
-						gbString a = expr_to_string(o->expr);
-						error_line("\tSuggestion: Did you mean to pass the slice into the variadic parameter with ..%s?\n\n", a);
-						gb_string_free(a);
-					}
 				}
 				err = CallArgumentError_WrongTypes;
 			}