-
Notifications
You must be signed in to change notification settings - Fork 25
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
Variable is not referenced in report (SVN ticket : #863) #94
base: gcos4gnucobol-3.x
Are you sure you want to change the base?
Variable is not referenced in report (SVN ticket : #863) #94
Conversation
cobc/codegen.c
Outdated
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 comment
The reason will be displayed to describe this comment to others. Learn more.
ctl = NULL;
is useless as ctl
is a local variable.
cobc/codegen.c
Outdated
CB_TREE(ctl), _("Control field %s is not referenced in report"), s->name); | ||
ctl = NULL; | ||
p->controls = NULL; | ||
return ; |
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 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 output_report_definition
function, so that p->controls
only contains controls that are used within the report.
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.
Just to clarify: output_control_report
is called on nx
recursively just before your test, for other controls, so if you set p->controls = NULL
, you discard all of them. The list of controls is used several times, so doing the test every time would be too complex, the only solution I see is to cleanup the list once at the beginning.
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.
See my review comments for reasons that may be related to the test suite. Sorry for not paying that earlier (while I wrote those notes directly after you PR, I somehow missed to click on "submit review").
Furthermore please rebase.
cobc/codegen.c
Outdated
@@ -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 comment
The 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 comment
The 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 _()
part that leads to translatable strings).
cobc/codegen.c
Outdated
@@ -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) | |||
&& 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 comment
The reason will be displayed to describe this comment to others. Learn more.
The "warning" prefix already is in by cb_warning
, pleas drop that and start with lowercase letter.
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 comment
The reason will be displayed to describe this comment to others. Learn more.
just minor style: please add a line break after [],
@@ -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 comment
The reason will be displayed to describe this comment to others. Learn more.
This is just a syntax check, please move to syn_reportwriter, using $COMPILE_ONLY
.
Please also add a test for the "ignoring nested line".
Codecov Report
❗ Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more. @@ Coverage Diff @@
## gcos4gnucobol-3.x #94 +/- ##
=====================================================
+ Coverage 65.39% 65.40% +0.01%
=====================================================
Files 32 32
Lines 58797 58808 +11
Branches 15492 15496 +4
=====================================================
+ Hits 38449 38463 +14
+ Misses 14362 14361 -1
+ Partials 5986 5984 -2
... and 1 file with indirect coverage changes 📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
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.
Rechecked: this issue still happens both in 3.2 release (and therefore current 3.x branch) and trunk. it would be nice if this PR can be finished so that we can include it upstream.
cobc/codegen.c
Outdated
} | ||
} | ||
} | ||
if (!bfound) { |
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
AT_CHECK([$COMPILE prog.cob], [0], [], | ||
[prog.cob: warning: control field ERROR-1 is not referenced in report | ||
prog.cob: warning: control field ERROR-2 is not referenced in report | ||
]) |
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 ideally should be changed to
AT_CHECK([$COMPILE_ONLY prog.cob], [0], [],
[prog.cob: warning: control field ERROR-1 is not referenced in report
prog.cob: warning: control field ERROR-2 is not referenced in report
])
# additional check if we generate code that compiles, see bug #863
AT_CHECK([$COMPILE -w prog.cob], [0], [], [])
cobc/codegen.c
Outdated
@@ -10229,7 +10246,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 comment
The 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.
dropped trailing whiutespace - mostly to get the CI running...
Hi Simon, I'm using my second account for this pull request.
Reference svn ticket :
#863
.I replaced
printf
bycb_warning_x
but I think I have some problems of understanding.If I understand, I have to remove two checks and this condition in
codegen.c
:I added a new function and I called it
finalize_report
:But I don't pass some unit test. Please tell me if I haven´t understood what I had to do ?