Start of change

INITCHECK

Use the INITCHECK option to have the compiler check for uninitialized data items and issue warning messages when they are used without being initialized.

INITCHECK option syntax

Read syntax diagramSkip visual syntax diagramNOINITCHECKINITCHECK(LAXSTRICT)

Default is: NOINITCHECK

Start of changeSuboption default is: INITCHECK(LAX) if INITCHECK is specified with no suboptionEnd of change

Abbreviations are: IC | NOIC

NOINITCHECK

If NOINITCHECK is in effect, the compiler will not issue any warning messages for uninitialized data items.

INITCHECK(LAX | STRICT)

Start of changeIf INITCHECK or INITCHECK(LAX) is in effect, the compiler will check for uninitialized data items and issue a warning message when a data item is used without being initialized. However, if a data item is initialized on at least one logical path to a statement, no warning message will be issued. End of change

Start of changeIf INITCHECK(STRICT) is in effect, the compiler will still check for uninitialized data items and issue a warning message when a data item is used without being initialized. However, unlike INITCHECK(LAX), INITCHECK(STRICT) will issue a warning message about uninitialized data for a data item used in a statement unless the data item is initialized on all logical paths to the statement.End of change

Start of changeHere is a sample program to illustrate the behavior differences between specifying INITCHECK(LAX) versus INITCHECK(STRICT). Y and Z represent some data items, with no value clauses:
    PROCEDURE DIVISION.
    IF Y > 5
      MOVE 2 TO Z
    END-IF
    DISPLAY Z
Z is initialized on one path to the DISPLAY statement but not the other, so if INITCHECK(LAX) is in effect, a warning message will be issued for Y only, while INITCHECK(STRICT) will also issue a warning message for Z.End of change
Restrictions:
  • The INITCHECK option analyzes data items in the WORKING-STORAGE SECTION and LOCAL-STORAGE SECTION only. In particular, it does not analyze data items in the LINKAGE SECTION or FILE SECTION.
  • The INITCHECK analysis does not track external or global data items.
  • The INITCHECK analysis does not track individual elements in tables independently. Instead, if one element of a table is initialized, all corresponding elements of the table are considered to be initialized. This applies to both fixed-length and variable-length tables.
  • The INITCHECK analysis does not track the initialization of items if it happens through a pointer. For example, if a pointer to an uninitialized data item is created by using ADDRESS-OF, and that data item is initialized through that pointer, the INITCHECK analysis might also issue a warning message.
  • For uninitialized data items being passed BY REFERENCE, no warning messages will be issued. However, the INITCHECK analysis will warn about uninitialized data items being passed BY CONTENT and BY VALUE.
  • Start of changeThe INITCHECK option does not track individual bytes of reference-modified data items accurately. Instead, if a data item is accessed by using a reference modification, this data item is considered to be initialized.End of change
  • Start of changeIf a data item is in a group with other items that have had their address taken, for example, as the result of being an SQL host variable, then that data item will also be considered to have its address taken, and the set of all address taken data items is always considered to be set by any call to an external function.End of change
Notes:
  • All of the INITCHECK analyses occur at compile time only.
  • The INITCHECK option has no effect on the behavior or performance of the program after it has been compiled.
  • Start of changeUse of the INITCHECK option might increase compile time and memory consumption.End of change
  • Start of changeINITCHECK is more accurate when used with OPT(1) or OPT(2), but it is also helpful when used with OPT(0).End of change
End of change