From 8798b1c89e36fa109e9a578b3ad255a85933d70e Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Sun, 4 Feb 2018 10:28:59 +0100 Subject: [PATCH] codegen: Don't try to infer error argument on async begin methods Only the async finish method might have an error parameter. Regression of 527dac8050fe90d7a28619383f11e968ab5c9a77 https://bugzilla.gnome.org/show_bug.cgi?id=793158 --- codegen/valaccodemethodcallmodule.vala | 2 +- tests/Makefile.am | 1 + tests/asynchronous/bug793158.vala | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/asynchronous/bug793158.vala diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index e799f2cf2..d2707809d 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -623,7 +623,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { current_method_inner_error = true; // add &inner_error before the ellipsis arguments out_arg_map.set (get_param_pos (-1), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_"))); - } else if (m != null && m.has_error_type_parameter ()) { + } else if (m != null && m.has_error_type_parameter () && async_call != ccall) { // inferred error argument from base method out_arg_map.set (get_param_pos (-1), new CCodeConstant ("NULL")); } diff --git a/tests/Makefile.am b/tests/Makefile.am index e4e12403f..b72cad0ff 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -300,6 +300,7 @@ TESTS = \ asynchronous/bug783543.vala \ asynchronous/bug792660.vala \ asynchronous/bug792942.vala \ + asynchronous/bug793158.vala \ asynchronous/closures.vala \ asynchronous/generator.vala \ asynchronous/yield.vala \ diff --git a/tests/asynchronous/bug793158.vala b/tests/asynchronous/bug793158.vala new file mode 100644 index 000000000..445092b9e --- /dev/null +++ b/tests/asynchronous/bug793158.vala @@ -0,0 +1,20 @@ +errordomain FooError { + BAR; +} + +class Foo : Object { + public async bool bar () throws FooError { + return true; + } +} + +MainLoop loop; + +void main () { + loop = new MainLoop (); + var foo = new Foo (); + foo.bar.begin ((o, r) => { + loop.quit (); + }); + loop.run (); +} -- 2.47.2