From 098f50c32dca45cafcfc626f49bc7342295afede Mon Sep 17 00:00:00 2001
From: Bob Dubner <rdubner@symas.com>
Date: Tue, 2 Jan 2024 17:09:54 -0500
Subject: [PATCH] Make all USING arguments persistent when recursing

---
 gcc/cobol/genapi.cc | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 4b2e3ad75a2d..ca520cf062d0 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 )
-- 
GitLab