From: Luca Bruno Date: Sat, 14 Dec 2013 13:41:26 +0000 (+0100) Subject: analyzer: Fix critical when catch clause does not catch an ErrorType X-Git-Tag: 0.23.1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d96dcfc5f65da2ef2c3c04614bef7853eeebcf2;p=thirdparty%2Fvala.git analyzer: Fix critical when catch clause does not catch an ErrorType Based on patch by Severin Heiniger. Fixes bug 670806. --- diff --git a/vala/valacatchclause.vala b/vala/valacatchclause.vala index b2f20a491..59a28e209 100644 --- a/vala/valacatchclause.vala +++ b/vala/valacatchclause.vala @@ -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; diff --git a/vala/valaflowanalyzer.vala b/vala/valaflowanalyzer.vala index 62dc58a73..9f94a42ca 100644 --- a/vala/valaflowanalyzer.vala +++ b/vala/valaflowanalyzer.vala @@ -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));