November 23, 2007 This readme file contains the latest information about the "C/C++ without Debug Tool" optional feature of z/OS V1R8 that was not previously available for our documentation. 1. The following messages apply to the z/OS V1R8 XL C/C++ release but were not documented in the z/OS V1R8 XL C/C++ Messages guide. These messages may be emitted if the user directs the output of the DB2 coprocessor into a UNIX System Services file when specifying a suboption of the DBRMLIB compiler option. CCN0756 The data definition name "&1" cannot be resolved. File "&2" could not be opened: Explanation: The compiler tried to open the indicated file path name and to associate it with the indicated data definition name. However, the file path name could not be opened. This is usually because the file does not exist, or you do not have permission to use the file. In the message text: &1 is the data definition name. &2 is the path name. User response: Specify an existing file name to which you have permission. CCN0757 The data definition name "&1" cannot be resolved. Information for character special file "&2", needed to allocate file "&3", cannot be obtained. Explanation: /dev/fdN character special files are used for all path name allocations. The compiler tried to validate the indicated character special file by using the stat function, but that function failed. The compiler cannot use the indicated file without the indicated character special file. In the message text: &1 is the data definition name. &2 is the path name. &3 is the real path name. User response: Retry the compile. If the problem persists, contact the IBM service representative responsible for your installation. CCN0758 The data definition name "&1" cannot be resolved. File "&2", needed to allocate file "&3", is not character special. Explanation: /dev/fdN character special files are used for all path name allocations. The compiler validated the indicated character special file, using the stat function, and determined that the indicated file is not a character special file. The compiler cannot use the indicated file without the indicated character special file. In the message text: &1 is the data definition name. &2 is the path name. &3 is the real path name. User response: Retry the compile. If the problem persists, contact the IBM service representative responsible for your installation. CCN0759 The data definition name "&1" cannot be resolved. Character-special file "&2", needed to allocate file "&3", is not major 5. Explanation: /dev/fdN character special files are used for all path name allocations. The compiler validated the indicated character special file, using the stat function, and determined that the indicated character special file does not have the correct major number. The compiler cannot use the indicated file without the indicated character special file. In the message text: &1 is the data definition name. &2 is the path name. &3 is the real path name. User response: Retry the compile. If the problem persists, contact the IBM service representative responsible for your installation. CCN0760 The data definition name "&1" cannot be resolved. Character-special file "&2", needed to allocate file "&3", is not minor "&4". Explanation: /dev/fdN character special files are used for all path name allocations. The compiler validated the indicated character special file, using the stat function, and determined that the indicated character special file does not have the correct minor number. The compiler cannot use the indicated file without the indicated character special file. In the message text: &1 is the data definition name. &2 is the path name. &3 is the real path name. &4 is the minor number. User response: Retry the compile. If the problem persists, contact the IBM service representative responsible for your installation. ======================================================================== 2. The following information relates to the z/OS V1R8 XL C/C++ Compiler and Run-Time Migration Guide for the Application Programmer: The information in Chapters 4, 9, and 14 on "Redefining a macro might result in a severe error" relates to the change in severity for the CCN3343 error message that occurred in z/OS V1R7. ======================================================================== 3. Continuing to use OS/390 V2R10 C/C++ Compiler in z/OS V1R8 with no support: This readme section describes the material and procedures required to copy and install the OS/390 V2R10 C/C++ compiler, which is shipped with z/OS V1.4, z/OS V1.5, and z/OS V1.6. Complete the sections below named "COPY INSTRUCTIONS" and "INSTALLATION INSTRUCTIONS". ABSTRACT AND DESCRIPTION OF RELATED APAR PK05324 ABSTRACT: ABILITY TO CONTINUE USING OS/390 V2R10 C/C++ COMPILER IN Z/OS V1R8 WITH NO SUPPORT DESCRIPTION: The z/OS V1R2 C/C++ compiler introduced support for the ISO Standard C++ language level. The OS/390 V2R10 level of the C/C++ compiler was included in the z/OS C/C++ optional priced feature, from z/OS V1R2 up to and including z/OS V1R6, to help clients migrate code from the previous C++ language level to the new ISO Standard C++ language level. The OS/390 V2R10 level of the C/C++ compiler is not included in z/OS V1R8. For clients who have not completed their migration to the newer ISO C/C++ compiler, the following information can be used to continue using the OS/390 V2R10 level of the C/C++ compiler in z/OS V1R8. The following conditions apply: 1. You must be licensed to the C/C++ feature of z/OS V1R8. 2. Your use of the OS/390 V2R10 C/C++ compiler is for migration purposes only. 3. Your use of the OS/390 V2R10 compiler on z/OS V1R8 is not formally supported. The license agreement and support terms, along with all other terms and conditions for the OS/390 V2R10 level of the C/C++ compiler associated with the release of z/OS where this component originated, continue to apply. Support is limited to replication of the defects in the originating release of z/OS and will terminate when support is withdrawn for that release of z/OS. PROGRAM MATERIALS The program number for the OS/390 V2R10 compiler is 5647-A01 PSP BUCKET : UPGRADE(OS390R10) SUBSET(OS3CCPP) FMID: HLB7703,JLB7713 and JLB7723 COMPID : 56551210A RETAIN Release : 703 SERVICE INFORMATION APARs: PQ39325 PQ38787 PQ40360 PQ41677 PQ45010 PQ44898 PQ43130 PQ45007 PQ45014 PQ45016 PQ42934 PQ45353 PQ47140 PQ47255 PQ47269 PQ48558 PQ48121 PQ50138 PQ50139 PQ50140 PQ47475 PQ48428 PQ48919 PQ50052 PQ49592 PQ50050 PQ50637 PQ46920 PQ48939 PQ51706 PQ51753 PQ52535 PQ52963 PQ52065 PQ53056 PQ54950 PQ55583 PQ52331 PQ56138 PQ56738 PQ56745 PQ57714 PQ57918 PQ58926 PQ59724 PQ59919 PQ56945 PQ61610 PQ48214 PQ62894 PQ63361 PQ62251 PQ67387 PQ67238 PQ67347 PQ65893 PQ67239 PQ66492 PQ67240 PQ66749 PQ67175 PQ67179 PQ68571 PQ68016 PQ67865 PQ68916 PQ69304 PQ70215 PQ70263 PQ71117 PQ70983 PQ71796 PQ74224 PQ74500 PQ74949 PQ75052 PQ67295 PQ75265 PQ76273 PQ75476 PQ77149 PQ77435 PQ76748 PQ77692 PQ78785 PQ86889 PQ87652 PQ90268 PQ95873 PQ97142 PQ97555 PTFs UQ44516 UQ44517 UQ45776 UQ45777 UQ47178 UQ47179 UQ50384 UQ50385 UQ52848 UQ52849 UQ55535 UQ55536 UQ56118 UQ53291 UQ56769 UQ58575 UQ58491 UQ61158 UQ61159 UQ61993 UQ63206 UQ65124 UQ65403 UQ66776 UQ54235 UQ68260 UQ68261 UQ70901 UQ70902 UQ72409 UQ72410 UQ74247 UQ75943 UQ75944 UQ77854 UQ77855 UQ78286 UQ78770 UQ79374 UQ79375 UQ80399 UQ89571 UQ95381 COPY INSTRUCTIONS All of the following sample jobs are located in the CBC.SCCNSAM data set after you have applied PTF UK16210. 1. ACCEPT all OS/390 V2R10 C/C++ compiler service PTFs if not already done 2. Modify and run CCNJPNCH - to allocate SMPPUNCH data set 3. Modify and run CCNJBMCS - to create MCS and JCLIN INSTALLATION INSTRUCTIONS If you decide to install the OS/390 OSV2R10 C/C++ compiler into its own SMP/E environment, you will need to create and initialize your own SMPCSI and SMP/E control data sets, therefore complete steps one through eight below. If you decide to install the OS/390 OSV2R10 C/C++ compiler into an existing SMP/E environment, only complete steps three through eight. All of the following sample jobs are located in the CBC.SCCNSAM data set after you have applied PTF UK16210 except for the IVT jobs CBC3JIV1 and CBC3JIV2. 1. Modify and run sample job CCNJSMPA - to define and initialize a new SMPCSI library 2. Modify and run sample job CCNJSMPI - to allocate SMP/E data sets 3. Modify and run sample job CCNJDDF - to define DDDEF entries 4. Modify and run sample job CCNJALL - to allocate target and distribution libraries 5. Modify and run sample job CCNJRECV - to receive OS/390 V2R10 C/C++ 6. Modify and run sample job CCNJAPPY - to APPLY OS/390 V2R10 C/C++ Note: OS/390 V2R10 C/C++ uses the CALLLIBS function provided in SMP/E to resolve external references during the installation. Before you run this sample job, ensure that the SCEELKED SMP/E DDDEF entry exits. 7. Modify and run sample IVT jobs CBC3JIV1 and CBC3JIV2 to verify the new installation of the OS/390 V2R10 C/C++ compiler. The jobs are located in HLQ.SCBCJCL data set. 8. Modify and run sample job CCNJACCP - to ACCEPT OS/390 V2R10 C/C++ ======================================================================== 4. #include_next preprocessor directive support: The following information applies to the #include_next preprocessor directive description in Chapter 17. Preprocessor directives in the z/OS V1R8 XL C/C++ Language Reference: To understand the behavior of #include_next, you should be familiar with the following behavior in the handling of #include and its relation to the search path: - The search path is a list of paths, each of which may form the start of a fully qualified file name. If the same path is specified multiple times in -I options, they are merged, and only one instance of the path appears in the search path. Each subsequent duplicate path is ignored. The reduction of duplicate paths also applies to the SEARCH and LSEARCH compiler options. No merging is performed for a default search path or any other paths in the regular search path sequence outside the SEARCH and LSEARCH compiler options. Also, paths are not reduced between these options. Please note that "file name" can be a data set name. When the including file is a member of a partitioned data set (PDS or PDSE), the search for the included file starts at the point in the search sequence after this partitioned data set. All members of the partitioned data set, in which the including file is located, are excluded from the search for the included file. The search order is affected by the USERLIB concatenation normally found in JCL. It can contain multiple data sets, which are normally searched to find any user header files included in the source. All data sets specified in the USERLIB concatenation are treated as one entry in the search sequence for the #include_next directive. In the following USERLIB concatenation example, if an including file is located in data set DSN=JONES.LIB1.H, and it contains the #include_next "test.h" directive, then DSN=JONES.LIB2.H will not be searched to find test.h but instead the next entry in the search sequence for user include files will be searched. The search will continue using the search order for system include files. //USERLIB DD DSN=JONES.LIB1.H,DISP=SHR // DD DSN=JONES.LIB2.H,DISP=SHR This limitation can be avoided by using the LSEARCH or SEARCH compiler options instead of USERLIB concatenation. For example, you can specify the LSEARCH(LIB1.+)LSEARCH(LIB2.+) compiler options to ensure that the DSN=JONES.LIB2.H data set is searched to find the include file test.h. The same limitation applies to the SYSLIB concatenation as well and it can be avoided by using the SEARCH compiler option. The following information applies to the description of the C++ suboptions for the LANGLVL compiler option in Chapter 4. Compiler Options in the z/OS V1R8 XL C/C++ User's Guide. GNU_INCLUDE_NEXT | NOGNU_INCLUDE_NEXT This option is provided as a GNU C++ portability option to enable or disable support for the GNU #include_next preprocessor directive. The default is LANG(GNU_INCLUDE_NEXT). ======================================================================== 5. SPILL compiler option default changes: The following information applies to the SPILL compiler option description in Chapter 4. Compiler Options in the z/OS V1R8 XL C/C++ User's Guide: For compiles with LP64 specified, the default for the SPILL compiler option is SPILL(256). For compiles with ILP32 specified, the default for the SPILL compiler option remains as SPILL(128). ======================================================================== 6. z/OS XL C++ support for IBM DB2 UDB for z/OS V7 and V8 coprocessor: As of PTFs UK18207 and UK18947, the z/OS V1R8 XL C++ compiler supports the IBM DB2 UDB for z/OS V7 and V8 levels of the coprocessor. For information on DB2 UDB for z/OS V7 and V8, refer to the DB2 Application Programming and SQL Guide. ======================================================================== 7. The following information applies to the FLOAT compiler option description in Chapter 4 of the z/OS V1R8 XL C/C++ User's Guide: FLOAT(AFP(VOLATILE|NOVOLATILE)) The AFP(VOLATILE) suboption for the FLOAT compiler option enables you to flag the AFP registers 8-15 as volatile, which means they are not expected to be preserved by the called program. Note: The AFP registers are 1, 3, 5, 7 and 8-15. However, the AFP registers 0-7 are always considered volatile. The AFP(VOLATILE) suboption prevents AFP registers from becoming corrupted if the application runs in a CICS environment where the AFP registers are not preserved across task switching. When AFP(VOLATILE) is specified, the compiler generates extra code to protect the values in these registers. When no suboption is specified for AFP, the default is NOVOLATILE, which is exactly the same as specifying FLOAT(AFP). Notes: 1. The option FLOAT(AFP(VOLATILE)) is not supported by IPA. If the option FLOAT(AFP(VOLATILE)) is passed to the IPA compile or link phase, then the IPA phase will emit a severe diagnostic message. 2. The use of the AFP(VOLATILE) sub-option to save the contents of AFP registers across calls could have an impact on performance. The user should evaluate the performance costs prior to using this suboption. The following information applies to the z/OS V1R8 XL C/C++ Compiler and Run-Time Migration Guide for the Application Programmer: The FLOAT(AFP) option instructs the compiler to generate code which makes use of the full complement of 16 floating point registers. These include the four original floating-point registers, numbered 0, 2, 4, and 6, and the Additional Floating Point (AFP) registers, numbered 1, 3, 5, 7 and 8 through 15. FLOAT(AFP) supports the VOLATILE | NOVOLATILE suboption. The default is NOVOLATILE. The NOVOLATILE suboption instructs the compiler to treat AFP registers 8-15 as non-volatile, i.e., the compiler assumes that any called subroutines will preserve the values in these registers. This convention is followed by code generated by the XL C/C++ compiler. It is safe to use NOVOLATILE under most environments. You can instruct the compiler to treat AFP registers 8-15 as volatile by specifying FLOAT(AFP(VOLATILE)), i.e., the compiler will generate instructions to save and restore the values in these registers across function calls. If you have C/C++ code which uses floating-point data types and which is to run under CICS, there is potential risk of data corruption or data loss or the program abending if the code is not compiled with the appropriate FLOAT sub-options. If the code is compiled with the old FLOAT(AFP) option or the new FLOAT(AFP(NOVOLATILE)) option, the code is at risk. The Load Module Analyzer (LMA) tool, described at http://www-1.ibm.com/support/ docview.wss?rs=1083&context=SSGMGV&dc=D400&uid=swg24010925&loc= en_US&cs=UTF-8&lang=en&rss=ct1083other can be used to identify which parts of the module are exploiting AFP registers 8-15. These parts should then be recompiled with FLOAT(AFP(VOLATILE) to correct the problem. Note that parts compiled with FLOAT(AFP(VOLATILE)) will be identified by LMA as using AFP registers 8-15. This is normal - the tool is detecting that the compiler has generated code to save and restore the registers, and there's no need to recompile code which is already built FLOAT(AFP(VOLATILE)). If the code is later changed, care must be taken to avoid introducing the potential risk of data corruption, etc., i.e., if floating point data types are added to the code, the parts containing the changed code must be compiled with FLOAT(AFP(VOLATILE)). CICS does its own task switching and does not preserve the AFP registers 8 through 15. CICS programs that have floating-point operations and use the AFP option must therefore set the VOLATILE suboption explicitly. There are no other environments known to have this issue, such as batch programs, since the full set of AFP registers are saved by the operating system during task switching. ======================================================================== 8. z/OS XL C/C++ support for IBM DB2 9 coprocessor: As of PTFs UK21554, UK21610, UK21614 and UK22859, the z/OS V1R8 XL C/C++ compiler supports the IBM DB2 9 level of the coprocessor. ======================================================================== 9. The following information relates to Chapter 4 of the z/OS V1R8 XL C/C++ Language Reference in "The _Packed qualifier (C only)": The following note is incorrect and should be ignored: Note: The compiler aligns pointers on their natural boundaries, 4 bytes, even in packed structures and unions. The correct information is: When the _Packed qualifier is used, the compiler removes padding between members of structures or unions, regardless of the member type. ======================================================================== 10. The following information relates to Chapter 13 of the z/OS V1R8 XL C/C++ User's Guide in "Creating an object library under z/OS batch": The EDCLIB cataloged procedure is located in the CEE.SCEEPROC data set. The EDCCLIB cataloged procedure is located in the CBC.SCCNPRC data set. ======================================================================== 11. The following information relates to Chapter 19 of the z/OS V1R8 XL C/C++ Language Reference in the description for the __BOOL__ predefined macro: NOKEYWORD(BOOL) is incorrect. NOKEYWORD(bool) should be used instead. ======================================================================== 12. The following information relates to the OBJECTMODEL compiler option description in Chapter 4 of the z/OS V1R8 XL C/C++ User's Guide: When you compile with the OBJECTMODEL(IBM) option, and the dynamic_cast operator is used in a constructor, a destructor, or in functions called from a constructor or destructor, the dynamic_cast operator has the following behavior: - Does not return a pointer or a reference to the derived object from the class for the constructor or destructor. - Returns NULL. When you compile with the LP64 compiler option, the OBJECTMODEL(IBM) compiler option is specified along with XPLINK. ======================================================================== 13. The following information relates to the C++ template example in Chapter 3 of the z/OS V1R8 XL C/C++ User's Guide: The C++ template example file is named CLB3ATMP.CPP and not CLB3ATMP.CXX. CLB3ATMP.CPP resides in the /usr/lpp/cbclib/sample/ directory. ======================================================================== 14. The following message is missing from the z/OS V1R8 XL C/C++ Messages guide: CCN4103 __VA_ARGS__ can only be used in the replacement list of a function-like macro with a variable argument list. Explanation: The identifier __VA_ARGS__ can only occur in the replacement list part of a C99 function-like macro that uses the ellipsis notation in the parameter list. User Response: Remove the __VA_ARGS__ identifier.