From c2a46c3db78b0e284010cf62bafc5889b417822f Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Mon, 3 Jan 2022 13:59:36 +0100 Subject: [PATCH] codegen: Cast given default-value of struct with possible member initializer Fixes https://gitlab.gnome.org/GNOME/vala/issues/1272 --- codegen/valaccodebasemodule.vala | 6 +++++- tests/structs/simple-type-default-value.vala | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/structs/simple-type-default-value.vala diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index f032ecab3..b8be34a62 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -6459,7 +6459,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var array_type = type as ArrayType; if (type.type_symbol != null && !type.nullable && (on_error ? get_ccode_default_value_on_error (type.type_symbol) : get_ccode_default_value (type.type_symbol)) != "") { - return new CCodeConstant (on_error ? get_ccode_default_value_on_error (type.type_symbol) : get_ccode_default_value (type.type_symbol)); + CCodeExpression val = new CCodeConstant (on_error ? get_ccode_default_value_on_error (type.type_symbol) : get_ccode_default_value (type.type_symbol)); + if (st != null && st.get_fields ().size > 0) { + val = new CCodeCastExpression (val, get_ccode_name (st)); + } + return val; } else if (initializer_expression && !type.nullable && (st != null || (array_type != null && array_type.fixed_length))) { // 0-initialize struct with struct initializer { 0 } diff --git a/tests/structs/simple-type-default-value.vala b/tests/structs/simple-type-default-value.vala new file mode 100644 index 000000000..63c21bdd2 --- /dev/null +++ b/tests/structs/simple-type-default-value.vala @@ -0,0 +1,14 @@ +[CCode (default_value = "{ .i = 23 }")] +[SimpleType] +public struct Foo { + int i; +} + +Foo bar (Object o) { + return {}; +} + +void main () { + Foo foo = {}; + assert (foo.i == 23); +} -- 2.47.2