On 4/20/2020 9:40 AM, Paul Gilmartin wrote:
>> For such a case, I will always code:
>>
>> DC CL8'&RQS. '
>>
> Does that truncate properly, but quietly if:
> o &RQS is 8 bytes?
> o &RQS is 9 bytes?  (Should warn.)
That's correct, with a warning only if FLAG(TRUNC) is enabled.

Edward E Jaffe writes:
> Your "should warn" above is an incorrect assertion.
>
> DC CL8'12345678901234567890' is perfectly legal and should *NOT* warn
> (unless some new warning option was added to HLASM that I missed).
You missed it, but it was quite recent.

If you enable the helpful FLAG(TRUNC) warning added by APAR
PH06572 in January 2019, then a warning will be issued if an
initial value gets truncated because of an explicit length,
causing its value to change.

For a character value, the loss of trailing spaces is not
considered truncation, and neither is the loss of leading zeros
for a numeric value.  However, if you want to check for those
cases too (which are normally harmless and likely to be
intentional) then the option FLAG(LONGER) will give a warning in
the case where an initial value is longer than the explicit
length but truncation is not considered to have occurred.

There's also another option FLAG(SIGNED).  If you code a signed
value for an unsigned field, for example AL2(-1), then the main
FLAG(TRUNC) option will not issue a warning if the value would
be in range for a signed field of the same size, as this is
likely to be harmless but the option FLAG(SIGNED) will issue a
warning in this case too.

The intention is that FLAG(TRUNC) is intended to give warnings
only if there is probably an error, so an installation can turn
it on by default.  FLAG(LONGER) and FLAG(SIGNED) provide extra
warnings for cases which are much less likely to be in error
and could well be intentional, so they can be turned on for
extra checking temporarily but should not normally be turned
on (and IBM-supplied macros may well trigger these warnings).

Jonathan Scott, HLASM
IBM Hursley, UK

Reply via email to