summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2023-01-31 15:43:57 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2023-01-31 15:43:57 +0100
commitc72958545735716f752a439cda183bf5c45333d5 (patch)
tree03752006d281794aa0ec0aefe9f7acf909b826b2 /codegen
parent54ca3c304d252eda7fe7ee50014ca28a3b68dd19 (diff)
downloadvala-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.vala4
-rw-r--r--codegen/valaccodemethodcallmodule.vala2
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));
}
}