-
Notifications
You must be signed in to change notification settings - Fork 28
Variable is not referenced in report (SVN ticket : #863) #94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: gcos4gnucobol-3.x
Are you sure you want to change the base?
Changes from 3 commits
78a6057
7b18452
610819d
7402d7b
bb2edcf
86c8cac
15ecc19
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,9 @@ | ||
|
||
2023-03-14 Samuel Belondrade <[email protected]> | ||
|
||
* codegen.c (output_report_control): add a loop to check if the variable | ||
exist (bug: #863) | ||
|
||
2023-02-21 Simon Sobisch <[email protected]> | ||
|
||
* codegen.c, flag.def [COBC_HAS_CUTOFF_FLAG]: fix compile errors, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9681,6 +9681,25 @@ output_report_control (struct cb_report *p, int id, cb_tree ctl, cb_tree nx) | |
if(nx) { | ||
output_report_control(p, id, nx, CB_CHAIN(nx)); | ||
} | ||
|
||
bfound = 0; | ||
for(i= p->num_lines-1; i >= 0; i--) { | ||
if(p->line_ids[i]->report_control) { | ||
struct cb_field *c = cb_code_field (p->line_ids[i]->report_control); | ||
if(c == s) { | ||
bfound = 1; | ||
break; | ||
} | ||
} | ||
} | ||
if (!bfound) { | ||
cb_warning_x (COBC_WARN_FILLER, | ||
CB_TREE(ctl), _("Control field %s is not referenced in report"), s->name); | ||
ctl = NULL; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
p->controls = NULL; | ||
return ; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This won't work if there is a list of more than one controls, and the first one is not used. If you only issue a warning and not an error, your code has to handle correctly such a case. I would advise to clean up the controls at the beginning of the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just to clarify: |
||
} | ||
|
||
output_local("/* Report %s: CONTROL %s */\n",p->name,s->name); | ||
prvid = 0; | ||
for(i = 0; i < p->num_lines; i++) { | ||
|
@@ -9727,7 +9746,8 @@ output_report_control (struct cb_report *p, int id, cb_tree ctl, cb_tree nx) | |
} | ||
} | ||
if(!bfound) { | ||
printf("Control field %s is not referenced in report\n",s->name); | ||
cb_warning_x (COBC_WARN_FILLER, | ||
CB_TREE(ctl), _("Control field %s is not referenced in report"), s->name); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need both this and the part above? Seem duplicated. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please start (nearly every) diagnostic with a lower-case letter; the only reason that this did not showed itself before is that it wasn't marked as msgid (the |
||
output_local(",NULL"); | ||
} | ||
seq = i = 0; | ||
|
@@ -10023,7 +10043,8 @@ output_report_define_lines (int top, struct cb_field *f, struct cb_report *r) | |
if ((f->report_flag & COB_REPORT_LINE) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (originating lines 10229-10235) This should be moved to typeck.c, at least the warning. |
||
&& f->children | ||
&& (f->children->report_flag & COB_REPORT_LINE)) { | ||
printf("Warning: Ignoring nested LINE %s %d\n", | ||
cb_warning_x (COBC_WARN_FILLER, | ||
CB_TREE(f), _("Warning: Ignoring nested LINE %s %d"), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The "warning" prefix already is in by |
||
(f->report_flag & COB_REPORT_LINE_PLUS)?"PLUS":"", | ||
f->report_line); | ||
f->report_line = 0; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9626,3 +9626,49 @@ BEFORE FINAL - SHOULD DISPLAY | |
|
||
AT_CLEANUP | ||
|
||
AT_SETUP([Check if the variable is referenced in the report]) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is just a syntax check, please move to syn_reportwriter, using Please also add a test for the "ignoring nested line". |
||
AT_KEYWORDS([report]) | ||
|
||
AT_DATA([prog.cob], [ | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. MAIN. | ||
ENVIRONMENT DIVISION. | ||
CONFIGURATION SECTION. | ||
INPUT-OUTPUT SECTION. | ||
FILE-CONTROL. | ||
SELECT A_1 ASSIGN TO EXTERNAL A_1. | ||
SELECT A_2 ASSIGN TO EXTERNAL A_2. | ||
DATA DIVISION. | ||
FILE SECTION. | ||
FD A_1. | ||
COPY test. | ||
FD A_2 REPORT ETAT. | ||
WORKING-STORAGE SECTION. | ||
REPORT SECTION. | ||
RD ETAT | ||
CONTROL FINAL ERROR-1 ERROR-2 | ||
PAGE LIMIT 66. | ||
PROCEDURE DIVISION. | ||
STOP RUN. | ||
]) | ||
|
||
AT_DATA([test.cpy], [ | ||
01 TEST-01. | ||
03 TEST-03. | ||
88 TEST-88 VALUE "0000000". | ||
09 ERROR-1. | ||
88 E-TEST-1 VALUE "111". | ||
10 E-TEST-10 PIC 9(3). | ||
03 E-TEST-03. | ||
04 E-TEST-04. | ||
05 FILLER PIC X(21). | ||
88 E-TEST-2 VALUE " SM". | ||
03 E-TEST-2-03. | ||
09 ERROR-2 PIC 9(3). | ||
]) | ||
|
||
AT_CHECK([$COMPILE prog.cob], [0], [], [prog.cob:18: warning: Control field ERROR-1 is not referenced in report | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. just minor style: please add a line break after |
||
prog.cob:18: warning: Control field ERROR-2 is not referenced in report | ||
]) | ||
|
||
AT_CLEANUP |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This check, the warning and likely also the setting to null (or dropping the single unused control, as @lefessan pointed out) must be moved to typeck.c.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok. I moved this