Changes in compiling with Enterprise COBOL Version 5 and Version 6

There are a number of changes to Enterprise COBOL V5 and V6 that result in different behaviors.

The COBOL runtime library, the Language Environment® component of z/OS®, must now be available at compilation time. In addition, Language Environment must be updated with the APAR fixes (PTFs) for compiling programs with Enterprise COBOL V5 or V6 and for running programs that were compiled with Enterprise COBOL V5 or V6. For details about prerequisite software levels and required maintenance, see Prerequisite software and service for Enterprise COBOL Version 5 and Version 6.

Compile-time storage requirements are substantially increased compared to prior versions of Enterprise COBOL. The compiler requires a minimum of 200 M region size to run. In Enterprise COBOL Version 5.1, the compiler option SIZE(MAX) is no longer supported, but gets tolerated and interpreted as SIZE(5000K). Your SIZE option setting should be in the range of 5000 K to 20000 K for V5.1.

It is not necessary to specify a high SIZE value for every large program. You must raise the default SIZE value only when you encounter this error message during compilation: IGYPG5062-U THERE WAS INSUFFICIENT STORAGE FOR COMPILER PROCESSING. This message indicates that the compiler front end has run out of memory while still processing the program, and you must use the SIZE option to allocate more memory for the front end.

However, note that the memory allocated to the front end using the SIZE option is not available to later phases of the compilation. Therefore, carefully calibrate the SIZE value to avoid depriving the code generation and optimization steps of memory. Otherwise, the compiler might abend in those later phases with the following message: IGYCB7145-U INSUFFICIENT MEMORY IN THE COMPILER TO CONTINUE COMPILATION.

In Enterprise COBOL V5.2 and later, the compiler option SIZE is no longer supported. Your region size must also be at least 200 M. The region size must be large especially at higher optimization levels, that is, programs compiled with the OPT(1) or OPT(2) compiler option.

Note: If you get unexpected compiler abends or this message: IEW4000I FETCH FOR MODULE IGYCBE FROM DDNAME STEPLIB FAILED BECAUSE INSUFFICIENT STORAGE WAS AVAILABLE, make sure that your region size is at least 200 M. REGION=0M in JCL gives you the maximum amount allowed by the JES system defaults set up by your system programmer. It may be less than needed. In that case your system programmer must increase the user limit of region size.
In Enterprise COBOL V6, the compiler starts using storage above the 2 GB BAR to compile programs, even those that are not large. This means that the z/OS MEMLIMIT parameter would have to be set to a nonzero value. The z/OS default for MEMLIMIT is 2 GB, but if you compile a program and your z/OS setting for MEMLIMIT is not high enough, you could get this compiler message: IGYCB7145-U Insufficient memory in the compiler to continue compilation. If you encounter this error message, set REGION=0M and MEMLIMIT=3G on the job card and recompile your programs. If it is successful, consider changing the system MEMLIMIT default that was set in IEFUSI, SMFPRMxx, or SMFLIMxx to no less than 2 GB.
Note: The SMFLIMxx PARMLIB member is only available in z/OS V2.2 and later versions.
Consider also the following changes:
  • The Language Environment member ID for Enterprise COBOL Version 5 Release 1 or later is 4 (The member ID for all previous COBOL versions was 5).
  • Compile-time CPU time requirements are substantially increased, compared to prior versions of Enterprise COBOL. The compiler may take more than five times as long to compile as the older compilers.
  • Compile time and run time diagnostic messages might differ, and might be generated at different times or locations.
    • Presence or absence of informational and warning level diagnostic messages might differ
    • Diagnostic messages for programs that define excessive and unsupported amounts of storage might be issued either by the binder at bind time, or by Language Environment at run time, instead of by the compiler at compilation time.
  • The compiler output is in GOFF format. This format allows the compiler to create more efficient generated code and also to put out the NOLOAD debug information (DWARF) segments.
  • There is no SYSDEBUG data set created for debug information.
  • Compiler listing format and contents differ from prior versions of Enterprise COBOL. You can find details on these changes in the Enterprise COBOL Programming Guide.
  • Starting in Enterprise COBOL V6.1, the build level information (of the form PYYMMDD) is always included in the header of the listing file, which assists with determining the maintenance level of the compiler. Here is an example of the listing header:
    PP 5655-EC6 IBM Enterprise COBOL for z/OS 6.3.0 PXXXXXX
  • In Enterprise COBOL V5 and V6.1, the diagnostic messages are in the middle of the listing. In Enterprise COBOL V6.2 and later versions, the diagnostic messages are at the bottom of the listing as with Enterprise COBOL V4 and earlier compilers.
  • Several compiler limits are increased with Enterprise COBOL V5 and V6. For details, see Compiler limit comparison.
  • Starting in Enterprise COBOL V6.3, listing terminologies change as follows:
    • STATIC MAP in Enterprise COBOL V6.2 and earlier versions is changed to INITIAL HEAP STORAGE MAP.
    • Writeable static area (WSA) in Enterprise COBOL V6.2 and earlier versions is changed to storage.
    • WSA24 in Enterprise COBOL V6.2 and earlier versions is changed to BELOW THE LINE STORAGE.
    • AUTOMATIC MAP in Enterprise COBOL V6.2 and earlier versions is changed to STACK STORAGE MAP.
  • Starting in Enterprise COBOL V6.3, the installation customization for placing compiler phases into shared storage is removed, since in modern systems most users have lots of storage available, and do not need to conserve storage by placing compiler phases in shared storage. As a result of this change to the compiler, the language for placing compiler phases in shared storage is no longer supported, so if you have a saved copy of the IGYCDOPT customization that has a specification of compiler phases being IN or OUT of shared storage, that language must be removed before you can assemble IGYCDOPT. If you do not have any statements in IGYCDOPT that specify IN or OUT for compiler phases, then you will not be affected by this change.

  • The use of passing a file-name to a subprogram with the USING phrase of the CALL statement was removed in Enterprise COBOL V6.3, but is restored in Enterprise COBOL V6.3 with PTF for APAR PH20724 installed.

If you are using IBM Enterprise COBOL Value Unit Edition (VUE) for z/OS, V5.2 and later versions, you cannot invoke the compiler multiple times from the same task (for example, invoking the compiler multiple times from the same task by using the MVS LINK macro).