I cannot answer if there is such a case where some COBOL runtime messages are 'suppressed" and not written to the MSGFILE (CEEMSG), but might add my interpretation about LE Programming Guide, section "COBOL condition handling semantics". It layouts how COBOL runtime handles a condition based on the SEVs.
- SEV0: COBOL does nothing(nothing in a sense that no condition handling is needed), still writes it to MSGFILE
- SEV1: COBOL needs to handle the signal and writes it to MSGFILE
- SEV2 and above: COBOL percolates it and LE handles it (for example, TERMTHDACT(QUIET) does not write the SEV2 and above messages to MSGFILE while TERMTHDACT(MSG) does)
The following program results in a warning and a severe message and demonstrates above.
JCL
PARM='/ter(quiet),MSGFILE(MINE),BADOPT'
...
MINE DD DSN=<HLQ>.DATAFILE,DISP=SHR
COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. 'A'.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 a1 pic 999 binary.
PROCEDURE DIVISION.
BEGIN.
* IGZ0049W
compute a1 = a1 ** 0
* GO TO will result in IGZ0037S
go to BEGIN2
stop run.
BEGIN2.
display " ".
END PROGRAM A.
"Language Environment Programming Reference", MSGFILE states:
MSGFILE specifies the ddname and attributes of the data set (message file) where
Language Environment directs the following output:
v All Language Environment messages
v Reports generated by the RPTOPTS and RPTSTG run-time options
v Output produced by the CEEMSG and CEEMOUT callable services
It sounds to me other languages also follow the same practice; that is, all SEV 0/1 go to MSGFILE and SEV2/above is controlled by TERM(...)
Roy Bae