summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2018-04-15 13:09:12 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2018-04-15 13:30:17 +0200
commitd6be549d094480e3ec82337bc16df60e99d68366 (patch)
tree00c269cb253e0b6e7c8389d6494e2781cd8b95c9
parent6f1d0947bed9260436e7d2da18977b3925cdb0bd (diff)
downloadvala-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.vala1
-rw-r--r--vala/valamethodcall.vala4
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) {