diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2020-04-05 22:24:58 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2020-04-05 22:28:49 +0200 |
commit | 4591fa50d2de24bac94347c477ccb25314179b15 (patch) | |
tree | 21b306a1102a33d1b2f1e6c2fc7d5dee102eb795 | |
parent | 25f93c2822095743f9c8d090e28c4610a324bf0f (diff) | |
download | vala-4591fa50d2de24bac94347c477ccb25314179b15.tar.gz |
codegen: Don't pass CCodeCastExpression to NULL-aware free macro
This resulted in invalid C code:
error: lvalue required as left operand of assignment
Fixes https://gitlab.gnome.org/GNOME/vala/issues/953
-rw-r--r-- | codegen/valaccodebasemodule.vala | 5 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/objects/member-initializer-property.vala | 15 |
3 files changed, 21 insertions, 0 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index f58985b9e..a921cd755 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3678,6 +3678,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { cfile.add_type_declaration (new CCodeMacroReplacement.with_expression ("%s(var)".printf (free0_func), macro)); } + // FIXME this breaks in our macro, so this should not happen + if (cvar is CCodeCastExpression) { + cvar = ((CCodeCastExpression) cvar).inner; + } + ccall = new CCodeFunctionCall (new CCodeIdentifier (free0_func)); ccall.add_argument (cvar); return ccall; diff --git a/tests/Makefile.am b/tests/Makefile.am index 88aaac40a..1d9aa496a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -384,6 +384,7 @@ TESTS = \ objects/interface-property-override.vala \ objects/interface-virtual-override.vala \ objects/member-initializer-base-properties.vala \ + objects/member-initializer-property.vala \ objects/member-initializer-property-owned-setter.vala \ objects/methods.vala \ objects/paramspec.vala \ diff --git a/tests/objects/member-initializer-property.vala b/tests/objects/member-initializer-property.vala new file mode 100644 index 000000000..cd71ed010 --- /dev/null +++ b/tests/objects/member-initializer-property.vala @@ -0,0 +1,15 @@ +class Baz { +} + +class Bar : Baz { +} + +class Foo { + public Baz baz { get; set; } +} + +void main() { + var foo = new Foo () { + baz = new Bar () + }; +} |