]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix code generation for unreachable declaration statements
authorJürg Billeter <j@bitron.ch>
Wed, 31 Mar 2010 14:45:16 +0000 (16:45 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 31 Mar 2010 14:54:51 +0000 (16:54 +0200)
codegen/valaccodebasemodule.vala
vala/valaflowanalyzer.vala

index 01e5fa6dc7f797068609183d29d8de65cf83799d..6bbd100892129708d9a915dd0543770a21d64eea 100644 (file)
@@ -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)));
index 9a04e1ba059defa62dd2f254713b3fe59c909967..d95ef5f668cf661326906ded7a1228ce749bcc42 100644 (file)
@@ -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;
                }