C Set ++ Compiler Version 2.0 Fixes List ----------------------------- ******************************************************************************* * * * This CSD contains fixes that are common to C/C++ Tools Version 2.0 and * * Version 2.01. Notwithstanding the version statements contained in the * * files of this CSD, this is not an upgrade of Version 2.0 to Version 2.01. * * * * The code to which you have access is determined by the version of the * * software to which you are licensed. * * * ******************************************************************************* =============================================================================== CTC0012 is informal Corrective Service ******************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------------- PJ19826 BE Fixes a problem where the code optimizer was generating incorrect code in a tail-call optimization, which then leads to stack memory corruption at runtime. ------------------------------------------------------------------------------- PJ19827 BE Fixes a problem where incorrect code was generated when passing a structure by value to a function when the size of the structure was 45 to 47 bytes. ------------------------------------------------------------------------------- PJ19853 BE Fixes a problem where the code optimizer may generate incorrect optimized code for a for-loop when the loop boundary values are array or structure elements. This causes the loop body to be executed only once regardless of the actual number of iterations defined. ------------------------------------------------------------------------------- PJ19854 BE Fixes a problem where the code generator is not doing correct integral promotion in some expressions, in which there are char or short variables. ------------------------------------------------------------------------------- PJ19855 BE Fixes a problem where the code optimizer may trap when pushing floating-point parameters for function calls. ------------------------------------------------------------------------------- PJ19856 BE Fixes a problem where the code generator may create code that corrupts the stack in a stmt like "t = foo().x", when the member of a structure returned by a function is stored to a variable on stack. ------------------------------------------------------------------------------- PJ19857 BE Fixes a problem where the code generator may incorrectly generate an FSUBR instruction using a 10-byte memory operand (which is an illegal instruction) ------------------------------------------------------------------------------- PJ19858 BE Fixes a problem where the code optimizer may incorrectly generate code to inline code of the form: strcat(memcpy(..)) ------------------------------------------------------------------------------- PJ19859 BE Fixes a problem where the code optimizer traps when handling a negative multiplier. ------------------------------------------------------------------------------- PJ19860 BE Fixes a problem where the code optimizer incorrectly performed strength reduction if an induction variable was a member of a structure. ------------------------------------------------------------------------------- PJ19869 BE Fixes a problem where simple functions containing code like the following: if (x) return y; else return z; may leave floating-point parameters on the NPX stack after function exit. ------------------------------------------------------------------------------- PJ19874 BE Fixes a problem where a floating-point value could be left on the NPX register stack if a floating-point value returned by a function is assigned but not used. ------------------------------------------------------------------------------- PJ19875 BE Fixes a problem in code generation when using _outp() with the value parameter being an expression. ------------------------------------------------------------------------------- PJ19877 BE Fixes a problem in code generation with /O+ /G5 switches in code containing calls to memchr() where the count is non-constant and evaluates to zero. ------------------------------------------------------------------------------- QI 36859 BE Fixes a problem where the optimizer could generate bad code for accessing local variables. ------------------------------------------------------------------------------- QI 36866 BE Fixes a problem where the optimizer generates incorrect code in returning a structure which causes memory corruption. ------------------------------------------------------------------------------- QI 36868 BE Fixes a problem where the could cause source of the form ((USHORT)((ULONG) x)) to generate bad code. ------------------------------------------------------------------------------- QI 36891 BE Fixes a problem where a MOD operation could cause the code generator to go into an infinite loop. ------------------------------------------------------------------------------- PJ19868 ICL Fixes a problem where the intermediate code linker cannot handle compiling of more than 256 files. It would either trap or generate a "cannot open immediate file" error message. ------------------------------------------------------------------------------- PJ19876 ICL Fixes a problem with /Ti that can cause ICL to issue a fatal error when compiling C++ files with pointers to member functions ------------------------------------------------------------------------------- QI 47562 ICL Fixes a problem with /Ti that can cause BE to generate 'error in intermediate file RBDEBUG(..)' message. ------------------------------------------------------------------------------- PJ19834 CFE Fixes a problem where an unexpected compiler error occurs in some programs containing duplicate declarations of structures ------------------------------------------------------------------------------- PJ19835 CFE Fixes a problem where the preprocessor does not always expand some macros in #if directive correctly. ------------------------------------------------------------------------------- PJ19847 CFE Fixes a problem where the preprocessor is not always paste tokens together properly. ------------------------------------------------------------------------------- PJ19850 CFE Fixes a problem where the compiler is not propagating the volatile property of a structure to the structure's members ------------------------------------------------------------------------------- PJ19904 C++FE Fixes a problem with the C++ compiler, where it was generating an invalid error EDC3263 message for a template class with a non-inline member function operator const T * () const; ------------------------------------------------------------------------------- PJ19905 C++FE Fixes a problem with the C++ compiler, where data and function members inherited through virtual bases may be accessed incorrectly. When accessing a virtual base class, or a base of a virtual base, certain inheritance hierarchies would cause the wrong base class to be accessed, and therefore the wrong data member to be accessed or the wrong virtual function table to be used. ------------------------------------------------------------------------------- PJ19906 C++FE Fixes a problem where the C++ compiler trapped on invalid source. (specifying "_Seg16" before "*" of a pointer variable) ------------------------------------------------------------------------------- PJ19907 C++FE Fixes a problem where the C++ compiler generated code that could cause object destructors to be called twice during exception processing ------------------------------------------------------------------------------- QI 28455 C++FE Fixes a problem where the C++ compiler generated an inconsistent function name when the function name is declared inside a structure of an anonymous union. When mangling a name, It now doesnot generate the part for the anonymous union. ------------------------------------------------------------------------------- PJ19820 CRT Fixes a problem with _access(). The _access() library function may fail if there are no available file handles. This has been changed so that if the process run out of file handles, _access() will increment the maximum number of handles available to the process. ------------------------------------------------------------------------------- PJ19829 CRT Fixes a problem with printf(). printf() failed with precision 0 and argument 0 in integral conversions, producing no output. This has been changed to fill the space specified by width with blanks. ------------------------------------------------------------------------------- PJ19831 CRT Fixes a problem handling exceptions inside the library termination code. Exception handling requires thread local storage which may have been freed if an exception happens inside termination code. Exceptions inside library terminatin code are no longer handled, by the library, but are passed to the OS for handling. ------------------------------------------------------------------------------- PJ19833 CRT Fixes a problem reloading a locale. If setlocale() was called twice for the same locale, the second call will free the storage used to store locale specific information, but will not allocate new storage, and dangling reference will occur. The fix allows a new locale to use already allocated storage. ------------------------------------------------------------------------------- PJ19851 CRT Fixes a problem with _strcoll(). The strcoll() library function may fail if its first argument is substring of the second argument. The function has been fixed to behave symetrically regarding its arguments. ------------------------------------------------------------------------------- PJ19852 CRT Fixes a problem with _heapmin(). If there are large objects allocated from the heap, the _heapmin() function may cause memory leaks. ------------------------------------------------------------------------------- QI 49096 CRT Fixes a process termination exception. An exception could happen at process termination if any of the standard streams are closed. A subsequent malloc() could reuse the memory used by standard streams, but the run-time still thinks it owns the memory. =============================================================================== CTC0011 is informal Corrective Service ******************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------------- QUAL-IMP BE Compiling a module without a main() function using the /O /Ol /Gu options could result a compile-time trap. ------------------------------------------------------------------------------- QUAL-IMP BE When the multiplication of char or short constants results in an overflow, incorrect code may be generated if the result of the multiply is used in a comparison. ------------------------------------------------------------------------------- QUAL-IMP BE An internal problem could result in a compile-time exception when compiling a switch with /O+ /Ti+. ------------------------------------------------------------------------------- QUAL-IMP BE In rare cases, stack space allocated by _alloca() could become corrupted when using auto-inlining. ------------------------------------------------------------------------------- QUAL-IMP BE Fixed an internal problem which in rare circumstances could cause incorrect code generation ------------------------------------------------------------------------------- PJ15990 BE ICL: When compiling with /Fw to generate intermediate files, a bug in the ICL could result in the incorrect intermediate files which causes the compiler backend to trap. ------------------------------------------------------------------------------- PJ16021 BE Defining an uninitialized variable of type double in more than one module results in a LINK386 L2025 error (symbol defined more that once). ------------------------------------------------------------------------------- PJ15991 BE ICL: A bug in the ICL could cause a compile-time trap in the compiler back end when the /Ol+ option is used. ------------------------------------------------------------------------------- PJ15987 BE An internal problem occurring during register assignment could cause a compile-time exception. ------------------------------------------------------------------------------- PJ16024 BE Fixes a problem where the epilog of a function could be incorrect if the function contains a call to _alloca. ------------------------------------------------------------------------------- PJ15881 BE Statements of the form "x ? INT_MAX : INT_MIN;" could be optimized incorrectly. ------------------------------------------------------------------------------- PJ15876 BE The last compare and jump in strncat() should be unsigned rather that signed. ------------------------------------------------------------------------------- PJ15882 BE Fixed a problem where compiling with /Gr and then running at ring 0 causes a Stack Segment Overrun trap. ------------------------------------------------------------------------------- PJ15880 BE Incorrect code may be generated when a conditional expression is logically negated and used as the test expression within an if statement. ------------------------------------------------------------------------------- PJ15894 BE The conversion from a segmented pointer to a flat pointer may not occur if the _Seg16 pointer is cast to an int. ------------------------------------------------------------------------------- PJ15935 BE Fixes a register assigning problem which could cause a run-time trap when calling a function via a pointer. ------------------------------------------------------------------------------- PJ16023 BE Fixes a problem where compiling with /Ti+ causes the compiler to create a huge temporary file. ------------------------------------------------------------------------------- PJ15986 BE A problem occurring while trying to optimize the usage of registers could result in incorrect code generation. ------------------------------------------------------------------------------- PJ15883 BE In rare cases, the generated code for the builtin version of strcmp could be incorrect when one of it's parameters is a function. ------------------------------------------------------------------------------- PJ15993 BE Consecutive / and % operators with identical operands inside simple loops could be compiled incorrectly. ------------------------------------------------------------------------------- PJ15869 BE Compiling an "if" that contains a negated ternary expression could cause a compile-time trap. ------------------------------------------------------------------------------- QUAL-IMP BE Using #pragma alloc_text() to place a function in the default code segment (CODE32) may result in a run-time exception since two CODE32 segments may be created. ------------------------------------------------------------------------------- PJ15872 BE Fixed an internal problem that could cause a compile-time trap when compiling an simple "if" containing the logical negation of a floating-point variable. ------------------------------------------------------------------------------- QUAL-IMP BE Incorrect debug information generated which could cause IPMD to fail. ------------------------------------------------------------------------------- QUAL-IMP BE When using the /Gt option, static arrays of the same type could be mapped on top of each other in rare cases. ------------------------------------------------------------------------------- PJ16038 BE Fixes a register assigner bug that could cause incorrect register spills/reloads of 8 or 16 bit values. ------------------------------------------------------------------------------- PJ15870 BE In rare cases, the code generated for the builtin version of memchr could be incorrect when using the /G5 option. ------------------------------------------------------------------------------- PJ15994 BE Instruction scheduling could cause code containing consecutive memsets to fail. ------------------------------------------------------------------------------- PJ15996 BE An internal problem occurring during loop unrolling could result in a compile-time exception. ------------------------------------------------------------------------------- PJ15933 BE An illegal MOV instruction could be generated when converting a 32-bit value to an 8-bit value. ------------------------------------------------------------------------------- PJ15934 BE An internal problem occurring while handling floating-point parameters in registers could cause a compile-time trap. ------------------------------------------------------------------------------- PJ16313 BE Incorrect code may be generated when converting an integer value to a floating-point value if the integer variable is used after the conversion. ------------------------------------------------------------------------------- PJ16037 C++FE In some rare cases, compiler might corrupt identifier CFE names that are also macro names not eligible for macro expansion. e.g., #define max(a,b) (((a) > (b)) ? (a) : (b)) int max; | -> max here could be corrupted ------------------------------------------------------------------------------- QUAL-IMP CFE Compiler is not generating correct code for the side effect in the following 'if' statement: if (*++p == '-0' && !1) ; 'p' does not get incremented as expected. ------------------------------------------------------------------------------- QUAL-IMP CFE Compiler is not correctly recognizing that statements in a 'switch' before any 'case' or 'default' are unreachable. ------------------------------------------------------------------------------- PJ15888 CFE Declaration of function returning pointer to array of unsigned int without 'int' specifier is misinterpreted. i.e., (*foo())-Ù {} causes the compiler to generate erroneous error message. It should be accepted in the same way as: int (*foo())-Ù {} ------------------------------------------------------------------------------- PJ15887 CFE Compiler incorrectly issues error message for the following correct code segment: char * const kpz; kpz[0] = '-0'; ------------------------------------------------------------------------------- QUAL-IMP CFE Compiler hangs when compiling source code with comment on the last line and the comment exceeds the right margin. ------------------------------------------------------------------------------- PJ16029 CFE Calling from 16 bit to 32 bit, and passing a pointer does not result in the pointer being automatically thunked. ------------------------------------------------------------------------------- PJ16028 CFE When ICC is invoked to compile a large number of files in a command line or a response file, ICC fails with message "Severe Error: Unable to retrieve messages from message file." ------------------------------------------------------------------------------- PJ16027 CRT If the result from internal function called by strtod() would cause underflow exception, it is rounded to zero, with proper error signaling. ------------------------------------------------------------------------------- PJ15886 CRT strdup() allocates memory with malloc(), so it cannot be freed in a program that was compiled with /Gt+. Changes to the heap algorithm now permit any type of memory (normal, tiled, or debug) to be passed to any kind of free() or realloc() function. In the case of realloc(), the resulting memory will be of the same type as the original. ------------------------------------------------------------------------------- PJ15885 CRT _LHUGE_VAL is a macro that is defined in math.h as being a reference to an external variable. The variable was not being exported from the library DLL. This has been corrected. ------------------------------------------------------------------------------- PJ15884 CRT Floating point number formatting has been changed to better handle any precision for floating point numbers. ------------------------------------------------------------------------------- PJ16026 CRT tmpnam() used to produce the same name in the first, tenth hundreth call. It is guaranteed that it will now make TMP_MAX unique names. ------------------------------------------------------------------------------- PJ16273 CRT getcwd() and getdcwd() library functions will fail on OS/2 Warp if the caller does not specify a buffer. ------------------------------------------------------------------------------- PJ16025 BE In case of running out of file handles, tempnam() will increase the number of allowable file handles and try again. ------------------------------------------------------------------------------- QUAL-IMP DLLRNAME DLLRNAME may not be able to handle renaming DDE4SBS.DLL in the current directory. ------------------------------------------------------------------------------- PJ16030 DLLRNAME Attempting to rename a DLL in another directory with DLLRNAME results in the renamed DLL being left in the current directory. ------------------------------------------------------------------------------- PJ16031 CPPFILT CPPFILT has been modified so that it doesn't use CMD.EXE to invoke a sub-program. ------------------------------------------------------------------------------- PJ16057 C++FE The compiler was issuing an incorrect error for the conversion of a pointer to a pointer to member of the same type. ------------------------------------------------------------------------------- PJ16083 C++FE The compiler was generating an error for a user defined postfix increment operator for an enum. ------------------------------------------------------------------------------- PJ16055 C++FE The value oxFFFFFFFF was not being accepted as a valid enum value. It's size was also being set to the wrong size. ------------------------------------------------------------------------------- QUAL-IMP C++FE Mysterious external variables ___nnn being generated with the /O+ compile option. ------------------------------------------------------------------------------- PJ16056 C++FE #pragma export of an overloaded const and non-const function was generating an error, and only one function was being exported. ------------------------------------------------------------------------------- QUAL-IMP C++FE New "#pragma defineonly" to match the AIX C Set++ compiler ------------------------------------------------------------------------------- PJ15905 C++FE The compiler was trapping when it tried to issue an error message for the invalid use of extern "C++" as a function parameter. ------------------------------------------------------------------------------- PJ15930 C++FE The compiler displayed 65536 as the column number when the source file is a precompiled header file. This cause a problem when trying to invoke an editor automatically under the WorkFrame. The fix is to display 1 as the column number when the source file is a precompiled header. ------------------------------------------------------------------------------- PJ15931 C++FE In an array of dimension N containing pointers to member, and with M initializers where M < N, the remaining N-M members should be initialized to zero. Instead, they were being left uninitalized and the first N-M were being zeroed. ------------------------------------------------------------------------------- PJ16032 C++FE Fixed problem with accessing base classes in hierarchies containing virtual base classes. ------------------------------------------------------------------------------- PJ16275 C++FE In some cases, temporary objects were being destructed twice. In some other cases, objects caught in a catch clause were not being destructed at all. ------------------------------------------------------------------------------- QUAL-IMP Samples PMLINES sample program in SAMPLE1A used the WinPeekMsg() API incorrectly, causing the sample to fail on OS/2 Warp. =============================================================================== CTC0010 is informal Corrective Service ******************************************************************************* FIX/APAR COMPONENT PROBLEM_DESCRIPTION ------------------------------------------------------------------------------- PJ14307 BE A dangling assignment to a floating point parameter inside a function can cause a floating point stack overflow if called often enough ------------------------------------------------------------------------------- PJ14318 BE This fix will correct a boundary problem that occurs when compiling with option /Gt+ if your program contains static data objects exactly equal to 64K in size. The problem does not occur when option /Gt- is specified. ------------------------------------------------------------------------------- PJ14309 BE Fixed a register problem that may occur when using _alloca with optimization. ------------------------------------------------------------------------------- PJ14310 BE A floating-point parameter for a function call could be set up incorrectly if the call is the last operation in a function (the tail call optimization). ------------------------------------------------------------------------------- PJ14311 BE Storing a char into an int and then later storing the int back into the char could, in very rare circumstances, produce incorrect code. ------------------------------------------------------------------------------- PJ14312 BE Nested for loops in which the iteration variables are members of the same structure may cause incorrect code generation. ------------------------------------------------------------------------------- PJ14313 BE Floating-point parameters may be left on the NPX register stack if there is an "if {...}" immediately above a "for (;;)" loop near the start of a function. This can later result in a floating point stack overflow exception. ------------------------------------------------------------------------------- PJ14314 BE An internal problem could result in a compile-time exception when processing a function with floating-point parameters. ------------------------------------------------------------------------------- PJ14315 BE Calling a function with two or more similar aggregate parameters could result in incorrect code generation. ------------------------------------------------------------------------------- PJ14316 BE Incorrect code could be generated for 16-bit operations that use the BP register when optimizing code without the /Op- compile parameter also specified. ------------------------------------------------------------------------------- PJ14317 BE If a conditional break inside an infinite loop jumps to a return, static variables used in the loop may not be correct at the return. ------------------------------------------------------------------------------- QUAL-IMP BE Accessing an int as a bitfield structure has undefined behaviour according to the ANSI C standard. However, the behaviour has been changed so that it is more in line with "intuitively obvious" behaviour. ------------------------------------------------------------------------------- PJ14424 BE In very rare circumstances, incorrect code may be generated when the only use of a parameter is a copy to a local variable. ------------------------------------------------------------------------------- QUAL-IMP BE Division and remainder operations that conditionally execute within a loop could be moved outside of the loop, perhaps causing unexpected divide-by-zero exceptions. (a result of the invariant code motion optimizations) ------------------------------------------------------------------------------- PJ14579 BE Under rare circumstances, due to an internal problem, compiling a large C++ module with /O+ /Ti+ can cause a compile-time exception. ------------------------------------------------------------------------------- QUAL-IMP C++FE The compiler was not restricting the change of char to signed or unsigned char during integral promotions only. They are three distinct types. Note: This fix may cause code that previously compiled cleanly to produce errors. It is simply the compiler detecting an error that it wasn't detecting previously. ------------------------------------------------------------------------------- PJ14428 C++FE When a variable is initialized , any temporaries that are created in the initializer expression should have their destruction delayed until the end of the block. For a reference variable to a ternary expression this is not the case and the destructors are being called too soon. ------------------------------------------------------------------------------- PJ14431 C++FE Compiler traps while generating a message for an inaccessible constant expression in a switch statement. ------------------------------------------------------------------------------- QUAL-IMP C++FE Compiler may trap when generating the error message EDC3004: "{" statement is not allowed in this scope. ------------------------------------------------------------------------------- QUAL-IMP C++FE The compiler issues an invalid error message for an unrecognized type when the symbol is actually a template argument T. ------------------------------------------------------------------------------- QUAL-IMP C++FE The compiler generates an error when trying to pass a array argument to a class template that takes a char * arg. ------------------------------------------------------------------------------- QUAL-IMP C++FE A declaration without a type specification causes the C++ compiler front end to trap when generating an error message. ------------------------------------------------------------------------------- QUAL-IMP C++FE The C++ compiler front end traps when compiling a statement of the form: <_Optlink specifier> () ------------------------------------------------------------------------------- PJ14433 C++FE The C++ compiler is restricting the use of: #pragma comment(user,"..") It can only occur once in a source file and must appear before any C++ statements. ------------------------------------------------------------------------------- PJ14434 C++FE The compiler is not generating a temp when passing an array to a function that takes a const char * const & argument. This results in a bad address being passed to the function. ------------------------------------------------------------------------------- QUAL-IMP C++FE When a nested type that is a typedef is used as a base class the compiler checks the access of the target of the typedef instead of the typedef name and an invalid access error is generated. ------------------------------------------------------------------------------- QUAL-IMP C++FE The C++ language specifies that for non-member operator functions, at least one of the arguments must be of class type, reference to class, enum type, or reference to enum. The compiler is generating an error for the definition of a operator + function that takes an enum and an int as parameters. ------------------------------------------------------------------------------- QUAL-IMP C++FE Initialization of static reference variables is happening at runtime static initialization instead of at compile time. ------------------------------------------------------------------------------- PJ14445 C++FE The preprocessor may generate the invalid error: "The suffix for the floating point constant is not valid." when concatenating two valid tokens together to form a floating point constant. ------------------------------------------------------------------------------- QUAL-IMP C++RT A program that supplies its own version of delete may have had the compiler supplied version called instead of the user version when linking dynamically. ------------------------------------------------------------------------------- QUAL-IMP C++RT Fixed problem where a duplicate symbol error was generated by the linker when a user provided global new() was linked into a program that also called set_new_handler(). ------------------------------------------------------------------------------- PJ14347 CFE If a variable is first declared as 'static' variable in file scope, then declaration of the same variable name in function scope should refer to the same variable. This linkage of identifiers does not work properly when /Ti+ is not specified. ------------------------------------------------------------------------------- PJ14346 CFE Compiler generated segmented to flat pointer conversion is missing for the following code segment: char * fp; unsigned long l = 0; fp = l < 0 ? 0 : (char* _Seg16)(void*)(void* _Seg16)l; ------------------------------------------------------------------------------- PJ14343 CFE Compiler internal error occurs compiling unusually large program with optimization turned on. ------------------------------------------------------------------------------- PJ14345 CFE #pragma margins and /Sg options causes erroneous /Wppc info message when the line ends at the right margin. ------------------------------------------------------------------------------- PJ14325 CFE After Invoking the compiler from a network drive with preload (/Tl) enabled, the network drive stays locked. ------------------------------------------------------------------------------- PJ14329 CFE In macro expansion, preprocessor mistreats two dots followed by any character as an elipsis. #define test left..right test is expanded to left..ight ------------------------------------------------------------------------------- QUAL-IMP CFE Some #line directives with file names specified are not processed properly by the compiler. ------------------------------------------------------------------------------- QUAL-IMP CFE The compiler is failing to provide a closing double quote (") on the executable name when calling LINK386. This does not cause a problem with LINK386.EXE, but could cause problems with other linkers. ------------------------------------------------------------------------------- QUAL-IMP CFE When ICC is compiling TEMPINC files, it is possible that compiling one TEMPINC file will update another one and make it out of date. ICC needs to loop doing TEMPINC compiles until all objects are up to date. ------------------------------------------------------------------------------- PJ14445 CFE The preprocessor erroneous issues an error message for the following legal macro expansion: #define MAKEHEX(a) 0x##a float j = MAKEHEX(2e); ------------------------------------------------------------------------------- PJ14454 CFE The C compiler generates incorrect code when evaluating the address of an array of array of structure members within another structure, with array index of 0. e.g. for the following structure, the values of &s2.s1[1][0].j and &s2.s1[1]->j are not evaluated properly: struct { int i; struct { int j; } s1[2][3]; } s2; ------------------------------------------------------------------------------- PJ14279 CRT getcwd() fails intermittently, returning an OS/2 error. ------------------------------------------------------------------------------- PJ14281 CRT The spawnx() and execx() families of functions sometimes pass a incorrect parameter list to the child process. ------------------------------------------------------------------------------- PJ14308 CRT When a file is opened for low level I/O in text mode, and the last character read from the file is a carriage return ('\r'), the _read() function moves the file pointer back by 1. This causes incorrect results only if the next operation on the file is _write() or _tell(). ------------------------------------------------------------------------------- PJ14456 CRT The TZ variable in the environment does not support timezones which are not an integral number of hours different from GMT. The format of the TZ variable has been changed to support this now. The format is now: SSS[+|-]hh[:mm[:ss]]DDD[,sm,sw,st,em,ew,ed,et,shift] [] indicates optional parameters. Note the addition of the minutes and seconds to the offset. ------------------------------------------------------------------------------- PJ14455 CRT On OS/2 2.11, the DosKillThread API cannot kill C library routines that get input from the keyboard. This works on OS/2 2.0 and 2.1, although it has unpredictable side effects. The library has been changed to allow this particular use of DosKillThread() to work safely on OS/2 2.11. Using the DosKillThread() API still has unpredictable side effects on OS/2 2.0 and 2.1 (an OS limitation). ------------------------------------------------------------------------------- QUAL-IMP SCL A bug in ostrstream causes program to trap. The actual bug is inside streambuf's sync(). It tries to put the end of line character into an empty stream buffer. ------------------------------------------------------------------------------- PJ14427 SCL Memory is allocated by the iostream library during static initialization, but is not being freed during termination. This causes a memory leak if the iostream functions are statically linked to a DLL which is dynamically loaded and unloaded. ------------------------------------------------------------------------------- ========================================================================= CTC0009 is formal Corrective Service The following fixes are provided in Compiler CS CTC0009 ************************************************************************** FIX/APAR COMPONENT PROBLEM_DESCRIPTION -------------------------------------------------------------------------- PJ13703 CFE Defining the first token in a program as a character string with the /D option causes an internal compiler error -------------------------------------------------------------------------- QUAL-IMP CFE Label not found message does not indicate which label is not found. -------------------------------------------------------------------------- QUAL-IMP CFE Internal compiler error while generating /Wenu messages for program with 'case' statement outside 'switch' scope. -------------------------------------------------------------------------- PJ13705 BE Fixed a parameter passing problem that occurs when the last statement of a function is to a _Pascal function. -------------------------------------------------------------------------- QUAL-IMP BE Allow the optimizer to assign registers a little more efficiently in certain circumstances. -------------------------------------------------------------------------- PJ13706 BE A loop that contains a goto to a return could, in rare cases, cause incorrect code generation. -------------------------------------------------------------------------- PJ12329 CRT A 16-bit function will get a protection exception if the function has a large automatic storage area. This problem occurs on secondary threads, and happens because the stack is not committed when the thread begins execution and the 16-bit code does not have stack probes. The compiler runtime code that sets up the 16bit stack needs to commit it. -------------------------------------------------------------------------- PJ13704 CRT Compiling 16-32 callback funtions with static link results in duplicate references when linking. Reference APAR PJ12507 -------------------------------------------------------------------------- QUAL-IMP CRT Now checking if a destructor exists during error recovery in __vec__copy(). May have caused traps ========================================================================= CTC0008 is informal Corrective Service The following fixes are provided in Compiler CS CTC0008 ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------- PJ12307 BE Cannot access local variables of callback functions within the Debugger. ------------------------------------------------------------------------- PJ12325 BE Incorrect code may be generated for a conditional increment or decrement if the comparison is signed. ------------------------------------------------------------------------- PJ12340 BE The conversion of an address to a segmented address may be incorrectly done if the address involves an index calculation (ie: &array{i-1}) ------------------------------------------------------------------------- PJ12341 BE A register used by strncat() could be clobbered under rare circumstances and cause incorrect behaviour. ------------------------------------------------------------------------- PJ12376 BE Fixed an internal problem with the handling of conditional increments with side effects. ------------------------------------------------------------------------- PJ12431 BE Incorrect register selection could cause incorrect results when performing a bitwise AND (&) with a constant. ------------------------------------------------------------------------- PJ12507 BE & CRT Compiling 16 to 32 callback functions with /Gh+ causes a run-time trap. ------------------------------------------------------------------------- QUAL-IMP BE Incorrect register selection could lead to traps or unexpected results with 32 to 16 to 16 to 32 code. ------------------------------------------------------------------------- QUAL-IMP BE Fixed a problem similarto PJ11975 for conditional decrements. ------------------------------------------------------------------------- PJ12567 CRT Exception handler was not deregistered within heap_check when using /TM+ ------------------------------------------------------------------------- PJ12326 CFE If listing is enabled (/Ls, /Li, or /Lj) and the source code contains nested #if, #elif and #ifdef, the compiler might fail with unexpected compiler error. ------------------------------------------------------------------------- PJ12327 CFE & C++FE After compiling programs with preload turned on, sometimes the front-end traps after the compilation is completed. ------------------------------------------------------------------------- PJ12477 CFE The compiler was not checking against possible errors reading the source and header files. ------------------------------------------------------------------------- PJ12490 CFE ICC will be changed to ignore /Si+ option when /Fb+ option is specified. ------------------------------------------------------------------------- QUAL-IMP CFE Pre-load program was not checking the return codes from some API calls. ------------------------------------------------------------------------- QUAL-IMP CFE If the compiler is first invoked from a directory with preload option enabled, while the compiler stays loaded, the user is prevented from removing the directory. This is inconvenient for the user. ------------------------------------------------------------------------- QUAL-IMP CFE Compiling program with function calls with very large number of arguments causes compiler to trap. ------------------------------------------------------------------------- PJ12378 C++FE If a class is _Exported, then a member function is subsequently defined to be "inline", the compiler still tells the linker to export the function. This causes an "undefined external" linker error. ------------------------------------------------------------------------- PJ12388 C++FE A C++ program compiled with optimization will cause the front-end to trap if a "const int" static class data member is referenced with explicit class qualification. ------------------------------------------------------------------------- PJ12427 C++FE Erroneous conversion error between typedefs, friend functions and the use of the friend function. ------------------------------------------------------------------------- PJ12445 C++FE Compiler trap processing declaration of const var symbol previously used without being declared. ------------------------------------------------------------------------- PJ12479 C++FE Preprocessor trap when processing a macro defined to NULL ------------------------------------------------------------------------- PJ12492 C++FE When one anonymous union is nested inside another in a C++ program, incorrect addresses are generated for the union members. ------------------------------------------------------------------------- QUAL-IMP C++FE Fixed #pragma page() and #pragma skip() so that a listing file will not be generated if the listing option is not activated on the command line. ------------------------------------------------------------------------- QUAL-IMP C++FE If the argument list of a macro is supplied via another macro, the macro might not be expanded as expected. Note: Corresponding CFE fix was implemented in CTC0006 as PJ11929 ------------------------------------------------------------------------- QUAL-IMP C++FE Wrapper with #pragma pack ------------------------------------------------------------------------- PJ12328 UTIL When a new C Set++ project (ie. no compiler options have been set), is invoked under the build action on the WorkFrame, the compiler DLL will return the default action. The default action is not to generate any .W files. ------------------------------------------------------------------------- PJ12522 UTIL Munch was giving the error "assert invalid object record." This error was incorrectly being produced for valid object record formats. ========================================================================= CTC0007 is informal Corrective Service The following fixes are provided in Compiler CS CTC0007 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------- PJ11951 BE & CFE The optimizer misses a chance to inline certain C++ functions. ------------------------------------------------------------------------- PJ11979 CFE In source code: int main (void) { int a, b; b = 1; a = 2; return 0; } The symbols for a and b are generated in a different order depending on whether /Ti is on. They should be generated in the same way no matter what the /Ti setting is. ------------------------------------------------------------------------- QUAL-IMP CFE When /La compiler option is used, some of the structures and unions are incorrectly shown in the listing ------------------------------------------------------------------------- PJ12108 CRT Library fixes made to solve problems when debug allocated objects were freed with non-debug routines and vice-versa. In addition the environment variable DDE4_HEAP_SKIP was added whereby the user can skip the _heap_check that occur when debug routines are invoked. The syntax is as follows: set DDE4_HEAP_SKIP=increment,starting where: 'increment' is how often a heap_check will be invoked, and 'starting' (which is optional) is how many calls to debug memory routines must occur before heap_checks are done. Example: DDE4_HEAP_SKIP=100,1000 will perform a heap_check after 1000 debug memory routines have been called and on every 100 calls after that. Example: DDE4_HEAP_SKIP=50 will perform a heap_check on every 50 calls made to a debug memory routine Note: If DDE4_HEAP_SKIP is not set in the environment then the default will be to invoke heap_check on every call to a debug memory routine. ========================================================================= CTC0006 is informal Corrective Service The following fixes are provided in Compiler CS CTC0006 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------- PJ11896 BE Optimization Problem: A for loop that functions like a memcpy() could be incorrectly optimized if the source of the copy is a struct member. ------------------------------------------------------------------------- PJ11952 BE Optimization Problem: An internal problem with expression simplification could result in incorrect code generation. ------------------------------------------------------------------------- PJ11953 BE Optimization Problem: Within an inner switch of nested switches, a goto jumping to a break for the outer switch could be turned into a break for the inner switch. ------------------------------------------------------------------------- PJ11975 BE Optimization Problem: Statements of the form: "if (f1 < f2) i++", where f1 and f1 have floating-point datatypes, could cause a compile-time exception in the BE. ------------------------------------------------------------------------- QUAL-IMP BE Optimization Problem: MOD operations could generate results of the wrong sign if both operands are negative. Similar results could occur for MOD and DIV by a negative power of 2. ------------------------------------------------------------------------- QUAL-IMP BE Fixed a small problem with the generated assembler listing file - an incorrect symbol could be used. ------------------------------------------------------------------------- PJ11872 C++FE Fixed a trap in the C++ frontend. The trap occurred when we tried to compile a source file that contained a class that had 2 declarations of the same friend function and a typedef for that function. ------------------------------------------------------------------------- PJ11887 C++FE Fixed a trap when compiling code with a definition of a function with _Far16 _Pascal linkage. ------------------------------------------------------------------------- PJ11981 C++FE If a conversion function yields a reference to a class with constructors, and a temporary is built from the result of that conversion, the temporary is initialized by bitwise copying instead of by calling its copy constructor. ------------------------------------------------------------------------- PJ11982 C++FE The compiler will deliberately not inline some functions if doing so would break C++ exception handling. However, when exception handling is disabled by /Gx+, the compiler still fails to inline those functions. ------------------------------------------------------------------------- PJ11983 C++FE A complex expression containing more than one conditional subexpression (i.e. the x ? y : z construct) may be generated such that the subexpressions are evaluated in the wrong order. ------------------------------------------------------------------------- PJ11984 C++FE An inline function consisting of a single return statement that returns a type-converted parameter may be incorrectly inlined. ------------------------------------------------------------------------- PJ11881 CFE Sizeof typedef within sizeof sometimes returns arbitrary value. ------------------------------------------------------------------------- PJ11929 CFE If the argument list of a macro is supplied via another macro, the macro might not be expanded as expected. ------------------------------------------------------------------------- PJ11889 CRT If the function that executes when a thread begins execution calls 16-bit code, then EDCThunkProlog is called from within the function prolog. EDCThunkProlog tries to access data that is outside the stack frame, and since this is the first frame on the stack, that storage is not allocated to the stack. A protection exception occurs. ========================================================================= CTC0005 is informal Corrective Service The following fixes are provided in Compiler CS CTC0005 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------ PJ11625 BE Optimization Problem: Compiling source that contains floating-point code could cause a compile-time trap in the backend. ------------------------------------------------------------------------ PJ11688 BE Optimization Problem: Statements of the form "do { i++; } while (condition); i--;" could be incorrectly optimized. ------------------------------------------------------------------------ PJ11692 BE Incorrect debug info could be generated for a data member of a class with type "char * const". ------------------------------------------------------------------------ PJ11695 BE Optimization Problem: Instruction scheduling could clobber the result of constant multiply across a call. ------------------------------------------------------------------------ PJ11696 BE Optimization Problem: Using an int variable as an array of chars within a loop could result in incorrect code generation. ------------------------------------------------------------------------ PJ11697 BE Optimization Problem: Statements of the form "while (cond) { if (--i) { i++; break; } }" could be incorrectly optimized. ------------------------------------------------------------------------ PJ11698 BE Optimization Problem: If the "count" paramter of strncat() is a builtin string function, incorrect code could be generated. ------------------------------------------------------------------------ PJ11699 BE Optimization Problem: Tail calling a _Pascal function from another function could result in an exception at run-time. ------------------------------------------------------------------------ PJ11701 BE strncat() could copy one byte even if "count" parameter is a variable of value 0. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: Adding two negative numbers and then negating the result could be optimized incorrectly. ------------------------------------------------------------------------ QUAL-IMP BE Without optimization, an expression of the form "*((char*)&array[index]+i)" could generate an incorrect OBJ even though the ASM is correct. ------------------------------------------------------------------------ PJ11491 C++FE new() is not returning a valid pointer when allocating a 0-sized array. ------------------------------------------------------------------------ PJ11492 C++FE The delete() operator for an object was not being called with the debug parameters when that object was being deleted because its constructor threw an exception. ------------------------------------------------------------------------ PJ11574 C++FE Reduce the long link times and large swapper file created when linking C++ programs that contain templates. ------------------------------------------------------------------------ PJ11575 C++FE If a virtual base class appears more than once in the class hierarchy, then one copy of if may be initialized several times and the other copies not initialized. ------------------------------------------------------------------------ PJ11584 C++FE The compiler may crash when generating debug information for a class that has no user-supplied nor compiler-generated inline functions. This is rare, since there are usually some compiler-generated ones. ------------------------------------------------------------------------ PJ11585 C++FE If a C++ compilation includes definitions of classes that contain virtual functions, all of which are inline functions, the compiler will generate those classes and functions whether or not they are actually used. This fix generates them only when necessary ------------------------------------------------------------------------ QUAL-IMP C++FE A C++ program containing a brace-enclosed statement block outside of a function body crashes the front-end when compiled with /Wuse+ if there is an unused label define in the block ------------------------------------------------------------------------ QUAL-IMP C++FE A goto within a catch block is incorrectly diagnosed as a jump into the catch block, which is illegal since it bypasses initialization of the catch variable ------------------------------------------------------------------------ QUAL-IMP C++RT Fixed memory leak that occurred when memory is allocated for an object however, it is not constructed because it's constructor threw an exception. ------------------------------------------------------------------------ PJ11702 CFE The compiler is not recognizing a constant expression properly when initialization involves an array within a structure within an array of structures ------------------------------------------------------------------------ PJ11703 CFE Using CSD 1 of C Set ++, the test case is expected to have a warning message, but the compiler should not be trapping. ------------------------------------------------------------------------ PJ11686 CRT The problem lies in reading across memory blocks. The code did not take into account of the number of characters read in from the previous blocks and hence reading more than necessary. ------------------------------------------------------------------------ PJ11687 CRT AL register will now be set by the library when making a call to DosGetMessage. ========================================================================= CTC0004 is informal Corrective Service The following fixes are provided in Compiler CS CTC0004 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------ PJ11127 BE Optimization Problem: Multiplying a variable by a constant and the adding or subtracting 1 could result in incorrect code generation. ------------------------------------------------------------------------ PJ11128 BE Optimization Problem: An internal problem could result in traps or unexpected results with 32 to 16 or 16 to 32 code. ------------------------------------------------------------------------ PJ11129 BE Optimization Problem: In rare circumstances, doing arithmetic with shorts could result in traps or unexpected results. ------------------------------------------------------------------------ PJ11134 BE Optimization Problem: The result of a right shift of a negative value, though implementation defined, could differ at /O- and /O+. ------------------------------------------------------------------------ PJ11135 BE Optimization Problem: The backend could abort with fatal error EDC4005 in intermediate file ROOPT when optimizing an if-then-else. ------------------------------------------------------------------------ PJ11137 BE Optimization Problem: Expressions of the form: "*(float *) &var", where var is an int, could cause a compile-time back-end trap. ------------------------------------------------------------------------ PJ11138 BE Optimization Problem: An internal problem occuring when compiling floating-point code could cause a compile-time back-end trap. ------------------------------------------------------------------------ PJ11139 BE Incorrect code could be generated when negating a char variable and then storing the result into an int variable. ------------------------------------------------------------------------ PJ11140 BE Optimization Problem: Statements of the form: "x--; if (cond) x += 2;" may be incorrectly optimized. ------------------------------------------------------------------------ PJ11141 BE Run-time traps could occur in code using 16 to 32 callback functions if the code crossed a 64K boundary. ------------------------------------------------------------------------ PJ11142 BE When using strncat(), an extra NULL was being appended to the end of the destination string if the length of the source string was less than "n". ------------------------------------------------------------------------ PJ11143 BE Optimization Problem: Statements of the form: "if (!x) {y = 0;} else {y = 1;}" could cause a compile-time trap if x is a float-point type. ------------------------------------------------------------------------ QUAL-IMP BE Under certain conditions, the optimizer could leave around some useless LEA instructions. This has now been fixed. ------------------------------------------------------------------------ QUAL-IMP BE When exporting callback functions, an incorrect symbol could be used, resulting in link errors. ------------------------------------------------------------------------ PJ11176 CFE Compiler generates incorrect code for referencing array of array in structure with array index of 0. ie: a.b[i][0].c = 1; a.b[i]->c = 2; ------------------------------------------------------------------------ PJ11177 CFE If a variable is first declared and then initialized both with a typedef type and a qualifier, the compiler generates incorrect code. ie: const typedef_name var; const typedef_name var = 0; ------------------------------------------------------------------------ PJ11179 CFE When initializing a member of a structure casting the member to _Seg16 pointer causes unexpected compiler error. ------------------------------------------------------------------------ PJ11180 CFE When #pragma handler is specified for some functions, the compiler randomly generates incorrect code that exports some of those functions. ------------------------------------------------------------------------ PJ11181 C++FE The following message is produced when both sides of a conditional expression are the same: recoverable EDC4005: Error occured in intermediate file RBEXPR(4902) ------------------------------------------------------------------------ PJ11182 C++FE An initialized function-scope static variable will cause the C++ front end to GPF if a compiler temporary is required when evaluating the initializing expression. ------------------------------------------------------------------------ PJ11183 CRT FILE struct members violate user name space. ------------------------------------------------------------------------ PJ11185 CRT MATHERR not handling domain errors. ========================================================================= CTC0003 is informal Corrective Service The following fixes are provided in Compiler CS CTC0003 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------ PJ10704 BE Incorrect debug information could cause IPMD to trap in DDE4BE32.DLL while debugging C++ programs. ------------------------------------------------------------------------ PJ10705 BE Incorrect debug information for const member functions could cause expression evaluation problems in IPMD. ------------------------------------------------------------------------ PJ10706 BE Incorrect debug information could cause IPMD to hang when debugging large programs. ------------------------------------------------------------------------ QUAL-IMP BE Incorrect debug information could confuse IPMD while debugging C++ programs. ------------------------------------------------------------------------ PJ10461 CRT Serialization code used in the runtime library may cause system traps. This usually occurs when one of the thread unexpectedly terminates. ------------------------------------------------------------------------ PJ10703 C++RTL CPPFILT utility truncates the mangled function names if it is greater than 233 characters. ========================================================================= CTC0002 is formal Corrective Service The following fixes are provided in Compiler CS CTC0002 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------ PJ10544 BE Optimization Problem: Compiling with /G5 /Ms may optimize SUB ESP,4 into PUSH EAX at inappropriate places. ------------------------------------------------------------------------ PJ10545 BE Incorrect code may be generated when copying structures whose size is less than 12 bytes. ------------------------------------------------------------------------ PJ10546 BE Optimization Problem: An internal problem during common subexpression elimination could cause a compile-time exception. ------------------------------------------------------------------------ PJ10547 BE Optimization Problem: Incorrect code generation may result when optimizing a loop that contains a goto which acts like a break. ------------------------------------------------------------------------ PJ10549 BE Optimization Problem: Instruction scheduling may move instructions out of the protected area between _disable and _enable. ------------------------------------------------------------------------ PJ10550 BE Optimization Problem: Returning a floating point value as an integer may cause problems on machines without FP co-processors when compiled with /O and either /G4 or /G5. ------------------------------------------------------------------------ PJ10552 BE The enum data offset field of a COMDAT placed in a user segment was being set to a non-zero value. ------------------------------------------------------------------------ PJ10553 BE Optimization Problem: An internal problem could cause a compile-time trap when compiling with /O+ /Gf+. ------------------------------------------------------------------------ PJ10556 BE The BE was not growing the number of file handles available. This caused a compile-time exception when the BE ran out of file handles. ------------------------------------------------------------------------ PJ10557 BE Optimization Problem: Calling a 32-bit function from the last statement of a _Far16 _Pascal function could be compiled incorrectly. ------------------------------------------------------------------------ PJ10558 BE Optimization Problem: The incorrect register may be cleared when returning 0. ------------------------------------------------------------------------ PJ10559 BE A constant left-shifted by another constant may be folded incorrectly when compiled with /Gi. ------------------------------------------------------------------------ PJ10560 BE Optimization Problem: Tail call optimization was being incorrectly applied to a call to a pascal linkage function from a system linkage function. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: Bad register selection around switch statements could cause incorrect code generation. ------------------------------------------------------------------------ QUAL-IMP BE With C++, returning a complex structure from a function whose destructor has been inlined could be compiled incorrectly. ------------------------------------------------------------------------ QUAL-IMP BE An internal problem could cause a compile-time trap when compiling, with /Gr /Rn, a _Far32 _Pascal function that returns a pointer. ------------------------------------------------------------------------ PJ10478 CFE The preprocessor was getting an internal compiler error for certain macro expansion. ------------------------------------------------------------------------ PJ10477 CFE If a source/header file contains null characters, the compiler gets an internal compiler error and may result in a huge swapper that may bring down your system. ------------------------------------------------------------------------ QUAL-IMP CFE Error message was being erroneously issued when '_Export" keyword or '#pragma export' are specified more than once for the same object. ------------------------------------------------------------------------ PJ10566 C++FE Conversion function results in an unconstructed temporary. No constructor was called for the temporary object. ------------------------------------------------------------------------ PJ10567 C++FE When passing a class as a by value parameter a temporary is not used and the class is passed by reference. ------------------------------------------------------------------------ PJ10568 C++FE Member friend incorrectly inherits function linkage from linkage specifier. ------------------------------------------------------------------------ PJ10569 C++FE Invalid Error message EDC3458 produced. ------------------------------------------------------------------------ PJ10570 C++FE GPF calling virtual member function of a template class when the module uses #pragma data_seg. ------------------------------------------------------------------------ PJ10571 C++FE Invalid error for postfix operator ++ on a reference in a conditional expression. ------------------------------------------------------------------------ PJ10572 C++FE Invalid error message EDC3276 and GPF when compiling a conditional expression. ------------------------------------------------------------------------ QUAL-IMP C++FE Runtime GPF accessing static data member at location 0. ------------------------------------------------------------------------ QUAL-IMP C++FE /Ms causes a runtime GPF when exception handling is used. ------------------------------------------------------------------------ PJ10462 CRT Thunk Prologue incorrectly probes stack causing system traps. This may occur with any 32-16 calls not in thread one. ------------------------------------------------------------------------ QUAL-IMP CRT Free not handling debug object. An debug memory object (as allocated by the debug memory routine) can cause system trap after it is passed to the regular free() function for freeing. ------------------------------------------------------------------------ QUAL-IMP CRT Spawn/Exec family functions should ignore net error. If the net error is not ignored, the search on the PATH stops prematurely, which may cause spawns/exec functions not to find any program whose path appears after the net work path causing the error. ------------------------------------------------------------------------ QUAL-IMP UTIL Compiler dialog did not parse a file when the file contains a '//' comment. It ignored lines after the '//' character until a blank line is reached. ------------------------------------------------------------------------ QUAL-IMP UTIL Dialog did not free up memory when saving or retrieving information to/from the project file extended attribute. ========================================================================= CTC0001 is informal Corrective Service The following fixes are provided in Compiler CS CTC0001 and later CS ************************************************************************* FIX/APAR COMPONENT PROBLEM DESCRIPTION ------------------------------------------------------------------------ PJ09575 DOC Hitting Ctrl H in EPM for contextual help did not work for printf or scanf. A change was made in the DDE4CLIB.NDX file.. ------------------------------------------------------------------------ QUAL-IMP ICC When /Fa compilation switch was used to create assembler file, and a template file was compiled, the compiler trapped. ------------------------------------------------------------------------ QUAL-IMP ICC Added the description of /Tm option to ICC help. ------------------------------------------------------------------------ PJ09573 FE Fixed the compiler to disallow illegal initialization of two-dimensional array of char with character string without braces. ------------------------------------------------------------------------ PJ09574 FE Structure initialization failed with an extra set of braces. ------------------------------------------------------------------------ QUAL-IMP FE Usage of _Export keyword caused the compiler to fail. ------------------------------------------------------------------------ QUAL-IMP UTIL Beta project causes Workframe to trap. ------------------------------------------------------------------------ QUAL-IMP UTIL Update English panels to fix a Japanese VGA screen. ------------------------------------------------------------------------ QUAL-IMP UTIL Remove the minimize capability of the notebook dialog. ------------------------------------------------------------------------ QUAL-IMP UTIL No keyboard focus when the notebook dialog first appears. ------------------------------------------------------------------------ QUAL-IMP UTIL Incorrect focus when Alt key is pressed inside a dialog. ------------------------------------------------------------------------ QUAL-IMP UTIL /Xc should not generate any command line include paths. ------------------------------------------------------------------------ QUAL-IMP C++FE The /Ms option is changing the linkage of internally declared compiler functions. This can result in runtime traps when using memory management or C++ exception handling. ------------------------------------------------------------------------ QUAL-IMP C++FE The linker fails when using /ND to rename a data segment. The compiler is generating bad code for partially initialized structures. ------------------------------------------------------------------------ QUAL-IMP C++FE Using the compiler options /La or /Lb causes the compiler to trap. ------------------------------------------------------------------------ PJ09576 C++FE Linking a program that contains templates causes an invalid error to be generated by lib.exe. The error is "LIB0007: Error : Unable to open D:\00900000.6.OBJ" ------------------------------------------------------------------------ PJ09577 C++FE Large program with many template functions, (more than 1023), traps at runtime. ------------------------------------------------------------------------ PJ09578 C++FE When linking programs that contain templates and object files that were generated by TASM the message: "Unknown Record Type {ox..}, offset {..} is generated. ------------------------------------------------------------------------ PJ09579 C++FE The compiler is incorrectly resolving to a function template instead of using a previously declared member function. ------------------------------------------------------------------------ PJ09580 C++FE Object destructors are not always run after a throw statement. ------------------------------------------------------------------------ PJ09581 C++FE Compiling code that uses _Far16 and _Pascal keywords causes an internal compiler error: "Exception #C0000005: 30751 occurred in file .., function .." ------------------------------------------------------------------------ QUAL-IMP C++RT Incorrectly handling exceptions in multiple runtime environments. ------------------------------------------------------------------------ PJ09568 BE Compiling source files with the same names may result in conflicting BSS static areas. ------------------------------------------------------------------------ PJ09570 BE Optimization Problem: Incorrect code could be generated when the result of a comparison is subtracted from a variable. ------------------------------------------------------------------------ PJ09571 BE The debug info could become corrupted in very large files which results in only assembler view being available within IPMD. ------------------------------------------------------------------------ PJ09572 BE Optimization Problem: An internal problem during loop optimizations could cause a compile-time exception in the back-end. ------------------------------------------------------------------------ PJ09569 BE Optimization Problem: Incorrect code could be produced for loops ending with an if-then-else where the last statement of the else is a break. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: An internal problem in store removal could cause incorrect code. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: An internal problem may cause a compile-time exception in the back-end. ------------------------------------------------------------------------ QUAL-IMP BE Incorrect code generation for _Far16 _Pascal functions that return floating-point types could cause a run-time exception. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: An internal problem, when compiling with /Ti+, may cause incorrect code generation for breaks within loops. ------------------------------------------------------------------------ QUAL-IMP BE Optimization Problem: The optimizer was incorrectly folding (0 / x) and (0 % x). ------------------------------------------------------------------------ QUAL-IMP BE Casting a floating-point value to int and then comparing the result to another int that was previously cast from a floating-point value may produce incorrect results. =========================================================================