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. * * * ************************************************************************* ========================================================================= 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. =========================================================================