[vala/0.48] vala: Report a warning for unhandled errors in destructors



commit 403ca3cc6e2dd1a5de6f0e8e44c1625f68f0fc0d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sat Apr 24 09:11:27 2021 +0200

    vala: Report a warning for unhandled errors in destructors
    
    Fixes https://gitlab.gnome.org/GNOME/vala/issues/1176

 tests/Makefile.am           |  1 +
 tests/errors/unhandled.vala | 45 +++++++++++++++++++++++++++++++++++++++++++++
 vala/valadestructor.vala    | 10 ++++++++++
 3 files changed, 56 insertions(+)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ee1eb3ead..8cf2b273e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -594,6 +594,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
index 000000000..1a3768a6c
--- /dev/null
+++ b/tests/errors/unhandled.vala
@@ -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 () {
+}
diff --git a/vala/valadestructor.vala b/vala/valadestructor.vala
index 61797ea22..a04849673 100644
--- a/vala/valadestructor.vala
+++ b/vala/valadestructor.vala
@@ -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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]