diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-01-31 15:43:57 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-01-31 15:43:57 +0100 |
commit | c72958545735716f752a439cda183bf5c45333d5 (patch) | |
tree | 03752006d281794aa0ec0aefe9f7acf909b826b2 /codegen | |
parent | 54ca3c304d252eda7fe7ee50014ca28a3b68dd19 (diff) | |
download | vala-c72958545735716f752a439cda183bf5c45333d5.tar.gz |
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
Diffstat (limited to 'codegen')
-rw-r--r-- | codegen/valaccodebasemodule.vala | 4 | ||||
-rw-r--r-- | codegen/valaccodemethodcallmodule.vala | 2 |
2 files changed, 6 insertions, 0 deletions
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)); } } |