From: Jürg Billeter Date: Wed, 31 Mar 2010 14:45:16 +0000 (+0200) Subject: Fix code generation for unreachable declaration statements X-Git-Tag: 0.8.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10bc7c02c6e772316e4178b50f3071e396d5a054;p=thirdparty%2Fvala.git Fix code generation for unreachable declaration statements --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 01e5fa6dc..6bbd10089 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1940,7 +1940,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { } foreach (LocalVariable local in local_vars) { - if (!local.floating && !local.captured && requires_destroy (local.variable_type)) { + if (!local.unreachable && !local.floating && !local.captured && requires_destroy (local.variable_type)) { var ma = new MemberAccess.simple (local.name); ma.symbol_reference = local; ma.value_type = local.variable_type.copy (); @@ -3168,7 +3168,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { var local_vars = b.get_local_variables (); foreach (LocalVariable local in local_vars) { - if (local.active && !local.floating && !local.captured && requires_destroy (local.variable_type)) { + if (!local.unreachable && local.active && !local.floating && !local.captured && requires_destroy (local.variable_type)) { var ma = new MemberAccess.simple (local.name); ma.symbol_reference = local; ma.value_type = local.variable_type.copy (); @@ -3204,7 +3204,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { var local_vars = b.get_local_variables (); foreach (LocalVariable local in local_vars) { - if (local.active && !local.floating && !local.captured && requires_destroy (local.variable_type)) { + if (!local.unreachable && local.active && !local.floating && !local.captured && requires_destroy (local.variable_type)) { var ma = new MemberAccess.simple (local.name); ma.symbol_reference = local; cfrag.append (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma))); diff --git a/vala/valaflowanalyzer.vala b/vala/valaflowanalyzer.vala index 9a04e1ba0..d95ef5f66 100644 --- a/vala/valaflowanalyzer.vala +++ b/vala/valaflowanalyzer.vala @@ -530,6 +530,7 @@ public class Vala.FlowAnalyzer : CodeVisitor { public override void visit_declaration_statement (DeclarationStatement stmt) { if (unreachable (stmt)) { + stmt.declaration.unreachable = true; return; }