diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index 4b2e3ad75a2d48ed1c751088a8f76a52181bbfbb..ca520cf062d0480f177fcdbe4122f143b92e9986 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -5469,6 +5469,21 @@ parser_division(cbl_division_t division, // It makes more sense if you don't think about it too hard. + + // We need to be able to restore prior arguments when doing recursive + // calls: + IF( member(args[i].refer.field->var_decl_node, "data"), + ne_op, + gg_cast(UCHAR_P, null_pointer_node) ) + { + gg_call(VOID, + "__gg__push_local_variable", + 1, + gg_get_address_of(args[i].refer.field->var_decl_node)); + } + ELSE + ENDIF + tree base = gg_define_variable(UCHAR_P); gg_assign(rt_i, build_int_cst_type(INT, i)); IF( rt_i, lt_op , var_decl_call_parameter_count )