[vala/staging] vala: Report a warning for unhandled errors in destructors
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] vala: Report a warning for unhandled errors in destructors
- Date: Sat, 24 Apr 2021 07:16:02 +0000 (UTC)
commit bace2691fe52c8cbb93172b0f5c0199bdd124a66
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 f409da1af..684546e44 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -613,6 +613,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 f363fee1b..d036801d5 100644
--- a/vala/valadestructor.vala
+++ b/vala/valadestructor.vala
@@ -78,6 +78,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'", body_error_type.to_string());
+ }
+ }
+ }
+
context.analyzer.current_symbol = old_symbol;
return !error;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]