]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
analyzer: Fix critical when catch clause does not catch an ErrorType 5d96dcfc5f65da2ef2c3c04614bef7853eeebcf2
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 14 Dec 2013 13:41:26 +0000 (14:41 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Sat, 14 Dec 2013 13:41:26 +0000 (14:41 +0100)
Based on patch by Severin Heiniger.

Fixes bug 670806.

vala/valacatchclause.vala
vala/valaflowanalyzer.vala

index b2f20a49194dbf767c015a9eea72427376327550..59a28e209d3399476cc32edbddf406243ba374c9 100644 (file)
@@ -117,6 +117,11 @@ public class Vala.CatchClause : CodeNode {
                checked = true;
 
                if (error_type != null) {
+                       if (!(error_type is ErrorType)) {
+                               Report.error (source_reference, "clause must catch a valid error type, found `%s' instead".printf (error_type.to_string ()));
+                               error = true;
+                       }
+
                        if (variable_name != null) {
                                error_variable = new LocalVariable (error_type.copy (), variable_name);
 
@@ -131,7 +136,6 @@ public class Vala.CatchClause : CodeNode {
                }
 
                error_type.check (context);
-
                body.check (context);
 
                return !error;
index 62dc58a7308017a1bd12e7a78ab92cdb31e080a1..9f94a42ca6c16006b82d123796b2b0e8cbe3a78c 100644 (file)
@@ -943,7 +943,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
                for (int i = catch_clauses.size - 1; i >= 0; i--) {
                        var catch_clause = catch_clauses[i];
                        if (catch_clause.error_type != null) {
-                               var error_type = catch_clause.error_type as ErrorType;
+                               var error_type = (ErrorType) catch_clause.error_type;
                                jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, catch_clause.error_type.data_type as ErrorDomain, error_type.error_code, null));
                        } else {
                                jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, null, null, null));