diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-01-03 13:59:36 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-01-03 13:59:36 +0100 |
commit | 29470dbcfc149d241886dcecb7fd6f4207dc7917 (patch) | |
tree | 3b189403212e634f1c6c4b01fa8a70e3d030d898 /tests | |
parent | 5738468d939f933a9d4b22707811ecfff2e936ed (diff) | |
download | vala-29470dbcfc149d241886dcecb7fd6f4207dc7917.tar.gz |
codegen: Cast given default-value of struct with possible member initializer
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1272
Diffstat (limited to 'tests')
-rw-r--r-- | tests/structs/simple-type-default-value.c-expected | 56 | ||||
-rw-r--r-- | tests/structs/simple-type-default-value.vala | 14 |
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/structs/simple-type-default-value.c-expected b/tests/structs/simple-type-default-value.c-expected new file mode 100644 index 000000000..a9a58bbab --- /dev/null +++ b/tests/structs/simple-type-default-value.c-expected @@ -0,0 +1,56 @@ +/* structs_simple_type_default_value.c generated by valac, the Vala compiler + * generated from structs_simple_type_default_value.vala, do not modify */ + +#include <glib.h> +#include <glib-object.h> + +#if !defined(VALA_EXTERN) +#if defined(_MSC_VER) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + +typedef struct _Foo Foo; +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); + +struct _Foo { + gint i; +}; + +VALA_EXTERN Foo bar (GObject* o); +static void _vala_main (void); + +Foo +bar (GObject* o) +{ + Foo _tmp0_ = (Foo) { .i = 23 }; + Foo result = (Foo) { .i = 23 }; + g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (o, G_TYPE_OBJECT), (Foo) { .i = 23 }); + result = _tmp0_; + return result; +} + +static void +_vala_main (void) +{ + Foo foo = (Foo) { .i = 23 }; + Foo _tmp0_ = (Foo) { .i = 23 }; + foo = _tmp0_; + _vala_assert (foo.i == 23, "foo.i == 23"); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 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); +} |