From: Rico Tzschichholz Date: Sat, 20 Nov 2021 16:29:22 +0000 (+0100) Subject: codegen: Add missing check while overriding virtual async interface methods X-Git-Tag: 0.52.8~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2b54cb81b6166b79ac392646fc42992bbe07281;p=thirdparty%2Fvala.git codegen: Add missing check while overriding virtual async interface methods This fixes a couple of criticals and possibly faulty C code. In addition to fc246aa7f8cbc6cb176724246a0187e19fe91198 See https://gitlab.gnome.org/GNOME/vala/issues/852 --- diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala index 6c59c7fe4..e59b6f03f 100644 --- a/codegen/valagasyncmodule.vala +++ b/codegen/valagasyncmodule.vala @@ -205,7 +205,7 @@ public class Vala.GAsyncModule : GtkModule { if (m.overrides || (m.base_interface_method != null && !m.is_abstract && !m.is_virtual)) { Method base_method; - if (m.overrides) { + if (m.overrides && m.base_method != null) { base_method = m.base_method; } else { base_method = m.base_interface_method; diff --git a/tests/objects/interface-virtual-override.vala b/tests/objects/interface-virtual-override.vala index 62fcb6597..827e2f944 100644 --- a/tests/objects/interface-virtual-override.vala +++ b/tests/objects/interface-virtual-override.vala @@ -2,15 +2,30 @@ interface IFoo : Object { public virtual int foo () { assert_not_reached (); } + public virtual async int bar () { + assert_not_reached (); + } } class Bar : Object, IFoo { public override int foo () { return 42; } + public override async int bar () { + return 23; + } } +MainLoop loop; + void main () { var bar = new Bar (); assert (bar.foo () == 42); + + loop = new MainLoop (); + bar.bar.begin ((o,a) => { + assert (((Bar) o).bar.end (a) == 23); + loop.quit (); + }); + loop.run (); }