From: Rico Tzschichholz Date: Mon, 3 Jan 2022 12:59:36 +0000 (+0100) Subject: codegen: Cast given default-value of struct with possible member initializer X-Git-Tag: 0.48.21~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f676564ffb89d4a95538969a6cd5a2d7d59a6cf5;p=thirdparty%2Fvala.git codegen: Cast given default-value of struct with possible member initializer Fixes https://gitlab.gnome.org/GNOME/vala/issues/1272 --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index eafe71009..db66ddb8e 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -6382,7 +6382,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); +}