From e2207021df77e96771879f6f0614a1eb26f9a324 Mon Sep 17 00:00:00 2001 From: David Declerck Date: Tue, 18 Jun 2024 16:27:13 +0200 Subject: [PATCH] Merge SVN 4490 --- cobc/ChangeLog | 6 ++++++ cobc/cobc.c | 10 ++++++---- cobc/codegen.c | 14 ++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/cobc/ChangeLog b/cobc/ChangeLog index e0e20137f..133fcabe8 100644 --- a/cobc/ChangeLog +++ b/cobc/ChangeLog @@ -463,6 +463,12 @@ * scanner.l: Check for typedef variable and return TYPEDEF_NAME * parser.y: Changes to look for TYPEDEF_NAME +2021-12-14 Simon Sobisch + + * cobc.c (print_fields), codegen.c (output_field_display): only check for + EXTERNAL/BASED GLOBAL on level 01/77 + * codegen.c (output_param): don't set external attribute for sub-fields + 2021-12-08 Ron Norman * codegen.c: When setting value into COMP-X field use cob_set_compx diff --git a/cobc/cobc.c b/cobc/cobc.c index e8d803753..6f48b7021 100644 --- a/cobc/cobc.c +++ b/cobc/cobc.c @@ -5505,10 +5505,12 @@ print_fields (struct cb_field *top, int *found) } } - pd_off += sprintf (print_data + pd_off, "%s%s%s", - top->flag_external ? " EXTERNAL" : "", - top->flag_is_global ? " GLOBAL" : "", - top->flag_item_based ? " BASED" : ""); + if (top->level == 1 || top->level == 77) { + pd_off += sprintf (print_data + pd_off, "%s%s%s", + top->flag_external ? " EXTERNAL" : "", + top->flag_is_global ? " GLOBAL" : "", + top->flag_item_based ? " BASED" : ""); + } if (top->redefines && !top->file) { pd_off += sprintf (print_data + pd_off, ", REDEFINES %s", top->redefines->name); diff --git a/cobc/codegen.c b/cobc/codegen.c index 0598a5ee6..2048868eb 100644 --- a/cobc/codegen.c +++ b/cobc/codegen.c @@ -4202,7 +4202,6 @@ output_param (cb_tree x, int id) { struct cb_reference *r; struct cb_field *f; - struct cb_field *ff; struct cb_cast *cp; struct cb_binary_op *bp; struct field_list *fl; @@ -4439,13 +4438,12 @@ output_param (cb_tree x, int id) f = CB_FIELD (r->value); - ff = real_field_founder (f); - - if (ff->flag_external) { - f->flag_external = 1; - f->flag_local = 1; - } else if (ff->flag_item_based) { - f->flag_local = 1; + { + struct cb_field *ff = real_field_founder (f); + if (ff->flag_external + || ff->flag_item_based) { + f->flag_local = 1; + } } if (!r->subs && !r->offset