From: Rico Tzschichholz Date: Wed, 6 Jun 2018 21:22:41 +0000 (+0200) Subject: codegen: Use copies of error_variable of catch-clauses for nested usage X-Git-Tag: 0.43.5~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=765c39c73c3096dd1de984db023763ec13448ef5;p=thirdparty%2Fvala.git codegen: Use copies of error_variable of catch-clauses for nested usage Calling visit_local_variable() multiple times on the same instance of a LocalVariable causes issues. --- diff --git a/codegen/valagerrormodule.vala b/codegen/valagerrormodule.vala index d29d09ca1..c10826218 100644 --- a/codegen/valagerrormodule.vala +++ b/codegen/valagerrormodule.vala @@ -353,8 +353,12 @@ public class Vala.GErrorModule : CCodeDelegateModule { ccode.open_block (); if (clause.error_variable != null) { - visit_local_variable (clause.error_variable); - ccode.add_assignment (get_variable_cexpression (get_local_cname (clause.error_variable)), get_variable_cexpression ("_inner_error_")); + // use a copy for possible nested usage + var error_variable = new LocalVariable (clause.error_type.copy (), clause.variable_name); + error_variable.active = true; + error_variable.checked = true; + visit_local_variable (error_variable); + ccode.add_assignment (get_variable_cexpression (get_local_cname (error_variable)), get_variable_cexpression ("_inner_error_")); } else { // error object is not used within catch statement, clear it var cclear = new CCodeFunctionCall (new CCodeIdentifier ("g_clear_error"));