From: Rico Tzschichholz Date: Thu, 21 Oct 2021 11:34:51 +0000 (+0200) Subject: vala: Really check compatiblity of error types for delegate symbol X-Git-Tag: 0.55.1~124 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01b87299042d891d61bea9966b98e0de6d156c58;p=thirdparty%2Fvala.git vala: Really check compatiblity of error types for delegate symbol Fixes https://gitlab.gnome.org/GNOME/vala/issues/1242 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 800bb6db8..209836d65 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -413,6 +413,7 @@ TESTS = \ delegates/implicit-local-variable.vala \ delegates/incompatible.test \ delegates/incompatible-assignment.test \ + delegates/incompatible-error-assignment.test \ delegates/incompatible-initializer.test \ delegates/incompatible-target.test \ delegates/instance-method-to-no-target.test \ diff --git a/tests/delegates/incompatible-error-assignment.test b/tests/delegates/incompatible-error-assignment.test new file mode 100644 index 000000000..94b5c492a --- /dev/null +++ b/tests/delegates/incompatible-error-assignment.test @@ -0,0 +1,18 @@ +Invalid Code + +errordomain FooError { + FAIL; +} + +errordomain BarError { + FAIL; +} + +delegate void FooFunc () throws FooError; + +delegate void BarFunc () throws BarError; + +void main () { + FooFunc f = () => { throw new FooError.FAIL (""); }; + BarFunc b = f; +} diff --git a/vala/valadelegatetype.vala b/vala/valadelegatetype.vala index 304da9eb2..8b51f324c 100644 --- a/vala/valadelegatetype.vala +++ b/vala/valadelegatetype.vala @@ -168,11 +168,11 @@ public class Vala.DelegateType : CallableType { // target-delegate may throw less but not more errors than the delegate var error_types = new ArrayList (); - get_error_types (error_types); + delegate_symbol.get_error_types (error_types); foreach (DataType error_type in error_types) { bool match = false; var delegate_error_types = new ArrayList (); - dt_target.get_error_types (delegate_error_types); + dt_target.delegate_symbol.get_error_types (delegate_error_types); foreach (DataType delegate_error_type in delegate_error_types) { if (error_type.compatible (delegate_error_type)) { match = true;