]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Report a warning for unhandled errors in destructors
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 24 Apr 2021 07:11:27 +0000 (09:11 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 28 Apr 2021 06:50:12 +0000 (08:50 +0200)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1176

tests/Makefile.am
tests/errors/unhandled.vala [new file with mode: 0644]
vala/valadestructor.vala

index 611b3ae9f8c2b96a661a905960a93afbf44668bc..3f2f5dea865f4fed3cc820e734ff80a3278300f3 100644 (file)
@@ -603,6 +603,7 @@ TESTS = \
        errors/invalid-type-check.test \
        errors/loops.vala \
        errors/method-throws.vala \
+       errors/unhandled.vala \
        errors/bug567181.vala \
        errors/bug579101.vala \
        errors/bug596228.vala \
diff --git a/tests/errors/unhandled.vala b/tests/errors/unhandled.vala
new file mode 100644 (file)
index 0000000..1a3768a
--- /dev/null
@@ -0,0 +1,45 @@
+public errordomain FooError {
+       FAIL
+}
+
+public class Foo : Object {
+       public string bar {
+               get {
+                       throw new FooError.FAIL ("property getter");
+               }
+               set {
+                       throw new FooError.FAIL ("property setter");
+               }
+       }
+
+       public Foo () {
+               throw new FooError.FAIL ("creation method");
+       }
+
+       construct {
+               throw new FooError.FAIL ("constructor");
+       }
+
+       class construct {
+               throw new FooError.FAIL ("class constructor");
+       }
+
+       static construct {
+               throw new FooError.FAIL ("static constructor");
+       }
+
+       ~Foo () {
+               throw new FooError.FAIL ("destructor");
+       }
+
+       class ~Foo () {
+               throw new FooError.FAIL ("class destructor");
+       }
+
+       public void foo () {
+               throw new FooError.FAIL ("method");
+       }
+}
+
+void main () {
+}
index 61797ea228a7ebdc3b49fa95cd8d72b4e8463eaa..a04849673f7b149c7bc668abe3e73835f8053da7 100644 (file)
@@ -77,6 +77,16 @@ public class Vala.Destructor : Subroutine {
                        body.check (context);
                }
 
+               if (body != null && !body.error) {
+                       var body_errors = new ArrayList<DataType> ();
+                       body.get_error_types (body_errors);
+                       foreach (DataType body_error_type in body_errors) {
+                               if (!((ErrorType) body_error_type).dynamic_error) {
+                                       Report.warning (body_error_type.source_reference, "unhandled error `%s'".printf (body_error_type.to_string()));
+                               }
+                       }
+               }
+
                context.analyzer.current_symbol = parent_symbol;
 
                return !error;