From c72958545735716f752a439cda183bf5c45333d5 Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Tue, 31 Jan 2023 15:43:57 +0100 Subject: codegen: Perform required casts for generic types of return-values and in/out-parameters Found by -Werror=int-conversion Fixes https://gitlab.gnome.org/GNOME/vala/issues/1407 --- codegen/valaccodebasemodule.vala | 4 ++++ codegen/valaccodemethodcallmodule.vala | 2 ++ 2 files changed, 6 insertions(+) (limited to 'codegen') diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 5d765c314..cf72070eb 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -4181,6 +4181,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { CCodeExpression result_lhs = get_cexpression ("result"); if (current_return_type.is_real_non_null_struct_type () && !is_in_coroutine ()) { result_lhs = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, result_lhs); + } else if (current_return_type is GenericType) { + set_cvalue (stmt.return_expression, convert_to_generic_pointer (get_cvalue (stmt.return_expression), stmt.return_expression.value_type)); } ccode.add_assignment (result_lhs, get_cvalue (stmt.return_expression)); } @@ -4341,6 +4343,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { set_cvalue (expr, convert_to_generic_pointer (get_cvalue (expr), expr.target_type)); ((GLibValue) expr.target_value).lvalue = false; } + } else if (expr.formal_target_type is GenericType && !(expr.value_type is GenericType)) { + set_cvalue (expr, convert_to_generic_pointer (get_cvalue (expr), expr.value_type)); } // Allow null to initialize non-null struct inside initializer list diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 6332271ad..95087b535 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -509,6 +509,8 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { carg_map.set (get_param_pos (get_ccode_destroy_notify_pos (param)), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_delegate_target_destroy_notify (arg))); } } + } else if (param.variable_type is GenericType) { + set_cvalue (arg, convert_from_generic_pointer (get_cvalue (arg), arg.target_type)); } } -- cgit v1.2.1