ECO NUMBER: CXXAE02062 ----------- PRODUCT: Compaq C++ for OpenVMS Alpha -------- UPDATED PRODUCT: Compaq C++ for OpenVMS Alpha 6.2 ---------------- APPRX BLCK SIZE: 37926 ---------------- CHECKSUM OF COMPRESSED KIT: 4202526912 COVER LETTER 1 KIT NAME: CXXAE02062 2 KITS SUPERSEDED BY THIS KIT: CXXAE01062 3 KIT DEPENDENCIES: NONE 4 KIT DESCRIPTION: 4.1 Version(s) of OpenVMS to which this kit may be applied: OpenVMS Alpha V6.2 - V7.2-1 4.2 Files patched or replaced: o [SYSEXE]CXX$COMPILER.EXE (new image) o [SYSEXE]CXX$DEMANGLE.EXE (new image) o [SYSEXE]CXX$LINK.EXE (new image) o [SYSMSG]CXX$COMPILER_MSG.EXE (new image) o [SYSMSG]CXX$LINK_MSG.EXE (new image) o [SYSLIB]LIBCXXSTD.OLB (new object library) o [SYSLIB]DECC$RTLDEF.TLB (new text library) 5 PROBLEMS ADDRESSED IN CXXAE01062 KIT Kit Installation Script o The Compaq C++ kit installation procedure no longer overwrites Compaq C header files if those on the system were created later than those on the kit. o The Compaq C header files (decc$rtldef.tlb) has been updated on this kit. These new headers define functionality which has been added to recent versions of OpenVMS as well as fix problems which were reported. o The installation of the Compaq C components have been removed from the CCXX$STARTUP.COM command procedure. A comment was placed in the command procedure telling people of this change and referring them to the DECC$STARTUP.COM procedure. Compiler o Attempts to restore pointer size using a pragma which differs from the pragma used to save the pointer size will now result in a diagnostic. Prior to this change, the compiler would take a memory access violation. o When one attempts to compile code which includes an explicit reference to an implicitly declared special member function, the compiler complains 'class "A" has no member "operator="'. The standard clearly states that all classes have copy assignment operators, so the compiler now creates an implicit declaration for the copy assignment operator if no user-declared copy assignment operator exists. o The compiler was incorrectly generating diagnostics for unreachable code which had been created by the compiler to deal with calling destructors shall an exception be thrown. The compiler no longer generates these warnings for compiler generated code. o Assigning the address of a NULL pointer to a variable was causing the compiler to issue integrity checks. This is now handled correctly. o A problem was corrected in the information written to an object module compiled using /debug to allow the debugger to locate the source files of template instantiations. o The compiler was micalculating the size of multidimensional arrays in our exception handling support. Destructors called for these array elements were being given an incorrect offset and would sometimes access beyond its array boundary. o A problem has been fixed where using the += operator on a variable pointed to by a char** member variable now operates correctly. There were cases which caused an extra increment operation to occur. o Static arrays within inline member functions with an initializer list containing both constant and non- constant initializers were not initialized correctly. Array elements initialized by constant initializers were instead initialized to 0. The compiler now initializes all array elements correctly. o The compiler no longer generates a GEM_ASSERTION when generating a listing for a file containing a #pragma module statement. o The macro __VMS_VER is no longer defined when the compiler cannot parse the version string of the underlying OpenVMS operating system. Prior to this change it was defined as zero. Standard Library o The run-time exception library no longer creates a new lock on each call to the cxxl$set_condition function. It now properly converts a single lock to and from exclusive access mode. o Compaq C++ version 6.2 had a bug in the string extraction operator that caused it to eat the extra space at the end of the string: ifstream inFile("input.dat"); // input.dat contains "abc de" inFile >> word; // read "abc" inFile.get(ch1); // ch1 should be space, was 'd' This problem has been fixed. o The basic_string reference count used to be protected by a mutex, which called thread locking and unlocking routines to ensure thread safety. The implementation was changed to instead use atomic builtins (see Appendix B of the C++ Using Guide), which should improve the performance of this class in multithreaded applications. o The basic_string::find_first_not_of(charT, size_type) function did not work correctly if the string contained embedded nulls. This has been corrected in this release. o If you compiled your program in strict_ansi mode and used the basic_fstream class, run-time access violations could happen. This is fixed in this release. o The V6.2 version of standard iostreams and locales had a bug which prevented them from being multi-thread safe. This has been fixed. o The standard library vector class did not allocate space for elements greater than 1024 bytes correctly, which could lead to runtime core dumps. This has been fixed. o A fix was added to the tree data structure (which sets and maps use) which will decrease the amount of space allocated for small element size containers. o In V6.2, basic_ostream::flush() would not always flush the buffer if the type of the stream was an fstream. This has been fixed. o The standard library headers no longer include pthread.h or tis.h. This allows them to be used in conjunction with the macro _PTHREAD_USE_D4 (DECthreads POSIX 1003.4a/Draft 4 (or d4) interface). 6 KIT INSTALLATION RATING: The following kit installation rating, based upon current CLD information, is provided to serve as a guide to which customers should apply this remedial kit. (Reference attached Disclaimer of Warranty and Limitation of Liability Statement) INSTALLATION RATING: 3 : To be installed by customers experiencing the problems corrected. 7 INSTALLATION INSTRUCTIONS: Install this kit with the VMSINSTAL utility by logging into the SYSTEM account, and typing the following at the DCL prompt: @SYS$UPDATE:VMSINSTAL CXXAE02062 [location of the saveset] The saveset location may be a tape drive, CD, or a disk directory that contains the kit saveset. Copyright Compaq Computer Corporation, 2000 All Rights Reserved. Unpublished rights reserved under the copyright laws of the United States. The software contained on this media is proprietary to and embodies the confidential technology of Compaq Computer Corporation. Possession, use, or dissemination of the software and media is authorized only pursuant to a valid written license from Compaq Computer Corporation. DISCLAIMER OF WARRANTY AND LIMITATION OF LIABILITY THIS PATCH IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED TO THE EXTENT PERMITTED BY APPLICABLE LAW. IN NO EVENT WILL COMPAQ BE LIABLE FOR ANY LOST REVENUE OR PROFIT, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, WITH RESPECT TO ANY PATCH MADE AVAILABLE HERE OR TO THE USE OF SUCH PATCH.