diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2018-04-15 13:09:12 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2018-04-15 13:30:17 +0200 |
commit | d6be549d094480e3ec82337bc16df60e99d68366 (patch) | |
tree | 00c269cb253e0b6e7c8389d6494e2781cd8b95c9 | |
parent | 6f1d0947bed9260436e7d2da18977b3925cdb0bd (diff) | |
download | vala-d6be549d094480e3ec82337bc16df60e99d68366.tar.gz |
vala: Treat floating method-return-type as nullable if error may be thrown
https://bugzilla.gnome.org/show_bug.cgi?id=795265
-rw-r--r-- | vala/valamethod.vala | 1 | ||||
-rw-r--r-- | vala/valamethodcall.vala | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/vala/valamethod.vala b/vala/valamethod.vala index 1adfeabfd..95bcfbe82 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -704,6 +704,7 @@ public class Vala.Method : Subroutine, Callable { } context.analyzer.current_symbol = this; + return_type.floating_reference = returns_floating_reference; return_type.check (context); var init_attr = get_attribute ("ModuleInit"); diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala index cc6a3fcda..41063ba3e 100644 --- a/vala/valamethodcall.vala +++ b/vala/valamethodcall.vala @@ -504,6 +504,10 @@ public class Vala.MethodCall : Expression { if (m.returns_modified_pointer) { ((MemberAccess) call).inner.lvalue = true; } + // avoid passing possible null to ref_sink_function without checking + if (may_throw && !value_type.nullable && value_type.floating_reference && ret_type is ObjectType) { + value_type.nullable = true; + } var dynamic_sig = m.parent_symbol as DynamicSignal; if (dynamic_sig != null && dynamic_sig.handler != null) { |