From 5ec944f8fa60ab0d61b0d98463bf193bbe5dd6c1 Mon Sep 17 00:00:00 2001
From: Bob Dubner <rdubner@symas.com>
Date: Fri, 5 Apr 2024 17:29:06 -0400
Subject: [PATCH] WIP: doing more stack than static

---
 gcc/cobol/genapi.cc  | 10 ++++------
 gcc/cobol/genmath.cc |  4 ++--
 gcc/cobol/genutil.cc | 15 ++++++++++++++-
 3 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 51fd3f63beb8..9820433fe034 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -159,8 +159,8 @@ trace1_init()
   if( first_time )
     {
     first_time = false;
-    trace_handle = gg_define_variable(INT, vs_static);
-    trace_indent = gg_define_variable(INT, vs_static);
+    trace_handle = gg_define_variable(INT, "trace_handle", vs_static);
+    trace_indent = gg_define_variable(INT, "trace_indent", vs_static);
 
     bTRACE1 = getenv("TRACE1") ? getenv("TRACE1") : gv_trace_switch;
 
@@ -5127,9 +5127,7 @@ parser_exit(void)
 
       tree array_type = build_array_type_nelts(UCHAR,
                                     current_function->returning->data.capacity);
-      tree retval     =  gg_define_variable(array_type,
-                                            NULL,
-                                            vs_static);
+      tree retval     =  gg_define_variable(array_type, vs_stack);
       gg_memcpy(gg_get_address_of(retval),
                 member(current_function->returning->var_decl_node, "data"),
                 member(current_function->returning->var_decl_node, "capacity"));
@@ -14995,7 +14993,7 @@ parser_symbol_add(struct cbl_field_t *new_var )
             {
             // We need a unique name for the allocated data for this COBOL variable:
             char achDataName[256];
-            sprintf(achDataName, "__vardata_%lu", sv_data_name_counter++);
+            sprintf(achDataName, "_%s_data_%lu", new_var->name, sv_data_name_counter++);
 
             tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate);
             new_var->data_decl_node = gg_define_variable(
diff --git a/gcc/cobol/genmath.cc b/gcc/cobol/genmath.cc
index e2796172da3e..066e2f986f5f 100644
--- a/gcc/cobol/genmath.cc
+++ b/gcc/cobol/genmath.cc
@@ -155,7 +155,7 @@ arithmetic_operation2(size_t nC, cbl_num_result_t *C,
   cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t ));
   int ncount = 0;
 
-  tree rounds = gg_define_variable(build_pointer_type(INT), vs_static);
+  tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack);
   gg_assign(  rounds,
               gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int))));
 
@@ -366,7 +366,7 @@ arithmetic_operation(   size_t nC, cbl_num_result_t *C,
   cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t ));
   int ncount = 0;
 
-  tree rounds = gg_define_variable(build_pointer_type(INT), vs_static);
+  tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack);
   gg_assign(  rounds,
               gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int))));
 
diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc
index c8b1a32c2dda..46efbc1b88b6 100644
--- a/gcc/cobol/genutil.cc
+++ b/gcc/cobol/genutil.cc
@@ -2423,7 +2423,20 @@ refer_fill_internal(cbl_refer_t &refer, refer_type_t refer_type)
   {
   //fprintf(stderr, "refer_fill_internal: %s %s\n", refer.field->name, cbl_field_type_str(refer.field->type));
   tree retval = gg_define_int(0);
-  refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, vs_static);
+
+  static int counter=1;
+  char ach[128];
+  sprintf(ach, 
+          "_%s_field_%d",
+          refer.field ? refer.field->name : "noname",
+          counter++);
+
+  // if( strcasestr(ach, "zeros") )
+    // {
+    // fprintf(stderr, "zeros\n");
+    // }
+
+  refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, ach, vs_static);
   if( refer.field )
     {
     gg_assign(member(refer.refer_decl_node, "field"),
-- 
GitLab