MSP430 Code Generation Tools Release Version 3.2.3 Defect History March 2010 ------------------------------------------------------------------------------ Table of Contents ------------------------------------------------------------------------------ 1. 3.2.3 Fixed Defects 2. 3.2.2 Fixed Defects 3. 3.2.1 Fixed Defects 4. 3.2.0 Fixed Defects 5. 3.2.0B1 Fixed Defects 6. Current Known Issues ------------------------------------------------------------------------------ 1. 3.2.3 Fixed Defects ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ FIXED SDSCM00008363 ------------------------------------------------------------------------------ Summary : Link-time errors with assert pragma Fixed in : 3.2.3 Severity : S3 - Minor Affected Component : Linker Description: The issue is how the compiler handles the assert pragma. The pragma is considered an intrinsic by the compiler. It uses the assertion expression to obtain information in order to perform optimization. Before the intrinsic was turned into a call to _abort_msg, the optimizer consider the function "dead" and removed the definition of it. This also caused the fflush() function to be removed as well. When the linker tried to bring fflush() back into the link, it also had to bring _doflush() because they are defined in the same file. This caused the redefinition error. The compiler now will not delete the _abort_msg function. ------------------------------------------------------------------------------ FIXED SDSCM00033570 ------------------------------------------------------------------------------ Summary : Incorrect encoding for assembly instruction Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: This bug is a result of the assembler performing arithmetic in a precision larger than 32 bits. In this particular case, the result becomes negative as a result of the bit-wise not operator. Then the assembler saturated the value when it was converted to a 32 bit constant, which resulted in 0x80000000. The assembler will now truncate the result to 32 bits and not saturate overflows. ------------------------------------------------------------------------------ FIXED SDSCM00033846 ------------------------------------------------------------------------------ Summary : The linker is overwriting sections while merging sections Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Linker Description: This bug is caused by a wrong section merge done by the linker. The linker, because of alignment considerations, aligns down a few bytes and overwrites spaces previous allocated to other sections. In this test case, it overwrote the space previous allocated to a constant string, thus the last byte of this string is overwritten. ------------------------------------------------------------------------------ FIXED SDSCM00033854 ------------------------------------------------------------------------------ Summary : The compiler ignores all but the last --preinclude option Fixed in : 3.2.3 Severity : S3 - Minor Affected Component : C/C++ Compiler (cl) Description: Instead of processing multiple --preinclude options as documented, the compiler shell will only process the last --preinclude option that appears on the command line if more than one is specified. ------------------------------------------------------------------------------ FIXED SDSCM00034078 ------------------------------------------------------------------------------ Summary : Compiler ignores restrict qualifier on a C++ reference type struct argument Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: The compiler is ignoring a restrict qualifier on a reference type struct argument. The issue with the parser has been identified and resolved. ------------------------------------------------------------------------------ FIXED SDSCM00034111 ------------------------------------------------------------------------------ Summary : Hex converter issues warning about a section falling in unconfigured memory when creating a load image with no ROMS directive Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Hex Converter (hex) Description: This bug affects the default load image section layout of the hex utility. If the load address of a section is larger than 0x80000000, it may not be included in the resulting load image object file. ------------------------------------------------------------------------------ FIXED SDSCM00034228 ------------------------------------------------------------------------------ Summary : Codegen seg fault Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: This bug can occur when performing optimization and compiling with -mf2 or below. ------------------------------------------------------------------------------ FIXED SDSCM00034230 ------------------------------------------------------------------------------ Summary : Codegen assertion failure Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: This bug will most likely affect customers using the -pm option. It is caused by an overflow of a counter. ------------------------------------------------------------------------------ FIXED SDSCM00034533 ------------------------------------------------------------------------------ Summary : Incorrect code generated for a const variable in a loop when compiled with optimizeation -o1 or higher Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: A loop which declares and initialises a const variable may cause the compiler to mistakenly propagate the variable into its uses. Const within a loop means constant for a single iteration, but the compiler may sometimes interpret it as constant throughout the function. ------------------------------------------------------------------------------ FIXED SDSCM00034557 ------------------------------------------------------------------------------ Summary : Compiler generates incorrect code for certain arithmetic with mixed types Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: An expression like "x->us += l", where "us" is an unsigned field shorter than int and "l" is a variable longer than int that may contain a negative value, may compile incorrectly when it occurs in a loop or other control structure that has multiple uses of "x->us". The compiler will try to copy "x->us" to a temporary variable to avoid repeating the memory reference, but it may lose the narrowing cast that comes with an assignment to a shorter-than-int type. ------------------------------------------------------------------------------ FIXED SDSCM00034738 ------------------------------------------------------------------------------ Summary : Incorrect code generated for pointer-to-pointer loops with optimization Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: A loop that advances a pointer until it reaches another pointer may compile incorrectly if the difference between start and end pointers won't fit in the type ptrdiff_t. The default mode for MSP with -vmspx uses 20-bit pointers and 16-bit ints and is more susceptible to this problem than targets where pointers and ints are the same size. Defect occurs in ------------------------------------------------------------------------------ FIXED SDSCM00034776 ------------------------------------------------------------------------------ Summary : 3.2.2 pinit table for large models does not have two word null termination Fixed in : 3.2.3 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: The 3.2.2 MSP430 linker is a creating 2-byte pinit termination record for large code model when the record should be 4 byte. As a result the auto-initialization routine during a C++ program startup may hang if the 2 bytes following the termination record has non-zero data. The bug was introduced as part of a fix for CQ33116. The update did not account for pinit records being 4 bytes in large code model. The issue only affects C++ programs in large code model (default when building for MSPX). A workaround would be to ensure that the .pinit section is padded to a 4 byte boundary and that the padding values are zeros. This can be done by adding a 'palign(4)' specification to the linker command file. On the line that specifies the allocation for the .pinit section add the palign command as described in the linker chapter in the Assembler's User Guide. The linker will pad the section with zeros to a 4 byte boundary assuming that the fill value has not been changed from zero (the default fill value). ------------------------------------------------------------------------------ FIXED SDSCM00034889 ------------------------------------------------------------------------------ Summary : No assembler warning or error when using non-local label with JMP instruction Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Assembler Description: Writing a JMP instruction to a non-local label, to a C routine in a different file for example, does not generate a warning or error. It will assemble a jump to an incorrect offset. ------------------------------------------------------------------------------ FIXED SDSCM00035030 ------------------------------------------------------------------------------ Summary : Arithmetic right shift by 16 of a 32-bit value produces incorrect result Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Code Generator Description: Shifting a 32-bit signed value right by 16 does not preserve the sign extension. This only affects shifts of exactly 16. An example program illustrating the defect #include long x = -1; int main() { x >>= 16; printf("x is %ld. It should be -1.\n",x); return 0; } ------------------------------------------------------------------------------ FIXED SDSCM00035088 ------------------------------------------------------------------------------ Summary : Floating point rounding during addition does not comply to IEEE 754 Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Runtime Support Libraries (RTS) Description: The floating point add/subtract routine does not perform IEEE 754 compliant rounding. It does not round towards an even number in the even of a tie. An example program #include unsigned long input1 = 0x40a00000; unsigned long input2 = 0x3e4cccd0; unsigned long correct_result = 0x40a66666; int main() { float f1, f2, result; f1 = *(float*)(&input1); f2 = *(float*)(&input2); result = f1 + f2; printf("%13.10f + %13.10f = %13.10f\n", f1, f2, result); printf("result in hex %lx\n", result); if (result == *(float*)(&correct_result)) printf("Rounded correctly.\n"); else printf("Incorrect rounding.\n"); return 0; } ------------------------------------------------------------------------------ FIXED SDSCM00035114 ------------------------------------------------------------------------------ Summary : MSP assembler generates illegal instructions as fill values .align in a code section Fixed in : 3.2.3 Severity : S3 - Minor Affected Component : Assembler Description: Space allocated in a code section in order to implement an assembler .align directive is filled with NOPs (rather than zeros) so that execution may flow through the space. ------------------------------------------------------------------------------ FIXED SDSCM00035153 ------------------------------------------------------------------------------ Summary : CGT Optimizer terminated abnormally Fixed in : 3.2.3 Severity : S2 - Major Affected Component : Optimizer Description: The compiler may abort if given a function call with an argument that is a struct passed by value, if the struct is small enough to fit into an int and compilation is for the COFF ABI. ------------------------------------------------------------------------------ 2. 3.2.2 Fixed Defects ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ FIXED SDSCM00024050 ------------------------------------------------------------------------------ Summary : Code size increase in some RTS library functions Fixed in : 3.2.2 Severity : S3 - Minor Affected Component : Runtime Support Libraries (RTS) Description: This bug cause code size increase in time related function in RTS library, specifically, in asctime() and strftime(). After this fix, there is no excessive inline of string functions used in these two time related functions. ------------------------------------------------------------------------------ FIXED SDSCM00029328 ------------------------------------------------------------------------------ Summary : Missing warning when place an initialized symbol in an un-initialized section using the DATA_SECTION pragma under C++ Fixed in : 3.2.2 Severity : S3 - Minor Affected Component : C/C++ Compiler (cl) ------------------------------------------------------------------------------ FIXED SDSCM00029984 ------------------------------------------------------------------------------ Summary : Difference in output due to various optimization levels Fixed in : 3.2.2 Severity : S3 - Minor Affected Component : C/C++ Compiler (cl) Description: Code of approximately the form a->b = a->b + k; if (...) ... = a->b; may compile incorrectly, such that the last a->b isn't re-read but instead reuses the value from before the assignment. ------------------------------------------------------------------------------ FIXED SDSCM00032116 ------------------------------------------------------------------------------ Summary : Compiler incorrectly reorders subsequent accesses to global variable Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Optimizer Description: References to external array variables declared with no size, ie, "extern int x[]," may not be properly checked for aliases and their accesses may be made in the wrong order. ------------------------------------------------------------------------------ FIXED SDSCM00032131 ------------------------------------------------------------------------------ Summary : parser array bounds read with template code Fixed in : 3.2.2 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: Parser could crash with C++ template code. ------------------------------------------------------------------------------ FIXED SDSCM00032325 ------------------------------------------------------------------------------ Summary : Free mismatched memory bug in shell Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Shell Description: Shell could crash with hand-coded assembly source. ------------------------------------------------------------------------------ FIXED SDSCM00032470 ------------------------------------------------------------------------------ Summary : PC optimizer segmentation fault Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Optimizer Description: On Windows only, compiling a very large function with many references to global, aliased, or union variables may cause an optimiser crash due to a stack overflow. ------------------------------------------------------------------------------ FIXED SDSCM00032746 ------------------------------------------------------------------------------ Summary : Using designated initializers on unions causes the parser to crash Fixed in : 3.2.2 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: The compiler does not support this GCC extension, but instead of issuing an error, the compiler accepted the syntax and crashed in a later phase. The compiler will now issue an error if designated initializers are used for unions. ------------------------------------------------------------------------------ FIXED SDSCM00033099 ------------------------------------------------------------------------------ Summary : Bitfield-to-bitfield assignment done incorrectly with optimization Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Optimizer Description: An assignment like "a.b = c.d", where both b and d are bitfields, the type of d is narrower than the type of b, and b's position in its container type is beyond what d's type can represent, may be compiled incorrectly in a way that truncates the value assigned to a.b. ------------------------------------------------------------------------------ FIXED SDSCM00033116 ------------------------------------------------------------------------------ Summary : Using the linker fill option can corrupt the terminating word of the .cinit section Fixed in : 3.2.2 Severity : S2 - Major Affected Component : COFF Linker Description: The linker will place a zero pad at the end of the combined .cinit sections to mark the last cinit record to be processed. When MSP was ported to the new technology linker it was using incorrect default values (4 bytes) for the cinit record alignment and the pad size where only 2 bytes were required. As a result an alignment hole was sometimes required before the zero pad value was added. This hole would use the default fill value 0xff and cause the autoinitialization routine to fail. Changed these to reflect MSP required values. ------------------------------------------------------------------------------ FIXED SDSCM00033302 ------------------------------------------------------------------------------ Summary : compiler does not issue error when a variable length array is seen with --gcc and --c99 options are used Fixed in : 3.2.2 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: Variable length arrays have always been unsupported by our tools. Even though we do not support this and no claim has been made that we do, the parser should issue an error if detected. Instead the parser silently accepted VLA's and in some cases the compiler would generate invalid code. With this release, the compiler will start emitting errors when VLA's are detected. ------------------------------------------------------------------------------ FIXED SDSCM00033320 ------------------------------------------------------------------------------ Summary : Abnormal termination - very large switch case list Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Optimizer Description: Under certain conditions, constructing an internal representation in the optimiser may leave erased nodes within the graph, which can cause the optimiser to crash. ------------------------------------------------------------------------------ FIXED SDSCM00033394 ------------------------------------------------------------------------------ Summary : Executables created on different PCs have different ordering of sections Fixed in : 3.2.2 Severity : S2 - Major Affected Component : COFF Linker Description: There are some instances in the linker where a there is a hash table comparison done on keys that are pointers to objects that are basically output sections. This can result in inconsistent behavior since the pointer values used as keys can vary from host to host, or even from run to run. The contents of the sections are correct and invariant; its is only the order that may change. ------------------------------------------------------------------------------ FIXED SDSCM00033664 ------------------------------------------------------------------------------ Summary : MSP430 compiler generates incorrect code for right shift by 8 operation Fixed in : 3.2.2 Severity : S2 - Major Affected Component : Code Generator Description: The compiler may incorrectly perform an int -> char narrowing operation in expressions of the form: var1 array[var2] where var2 is a 16-bit int variable narrowed to 8 bits either by a mask or cast. ------------------------------------------------------------------------------ 3. 3.2.1 Fixed Defects ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ FIXED SDSCM00030215 ------------------------------------------------------------------------------ Summary : C I/O cannot support ftell/fseek for DOS format files opened in text mode Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Runtime Support Libraries (RTS) Description: Use of ftell and fseek on DOS formatted files is not supported in text mode, with buffered I/O. The avoid this error the run-time libraries can be rebuilt with unbuffered I/O by defining the following macro _TI_FORCE_UNBUFFERED_TEXT_IO. This is defined by adding this switch -D_TI_FORCE_UNBUFFERED_TEXT_IO to the shell. Workaround: 1. Open the DOS file in binary mode. 2. Use one of many DOS-to-Unix file converters to strip carriage-returns from the input file. ------------------------------------------------------------------------------ FIXED SDSCM00030349 ------------------------------------------------------------------------------ Summary : Symbol details of enumerated variable are lost in COFF file when optimization is enabled Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Optimizer Description: A variable of an enumerated type will not be noted as such after optimisation; instead, it will have an integral type. ------------------------------------------------------------------------------ FIXED SDSCM00031032 ------------------------------------------------------------------------------ Summary : null pointers are dereferenced when using optimizer with -mf Fixed in : 3.2.1 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: A loop like for ... if (e != NULL) *e += ... may compile incorrectly in such a way as to allow *e to happen outside the test for NULL. ------------------------------------------------------------------------------ FIXED SDSCM00031080 ------------------------------------------------------------------------------ Summary : Bad relocation of expression referencing symbol in same code section and in an object file resulting from partial link Fixed in : 3.2.1 Severity : S2 - Major Affected Component : ELF Linker Description: When the linker creates a COFF format file using an input file that was the result of previous partial link (-r), a reference to a symbol from within the file resulting from the partial link may be calculated incorrectly. ------------------------------------------------------------------------------ FIXED SDSCM00031090 ------------------------------------------------------------------------------ Summary : Compiler mistakenly ignores volatile when applied to a structure Fixed in : 3.2.1 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: A write to a field in a volatile struct from within a loop may be improperly optimised to only write the final value. ------------------------------------------------------------------------------ FIXED SDSCM00031208 ------------------------------------------------------------------------------ Summary : generated code for function is not ending in a RET Fixed in : 3.2.1 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: At optimization level -o2 or above the compiler's code size optimization pass that utilizes procedure abstraction may generate incorrect code for C functions declared as interrupt routines. Affected interrupt functions will likely result in runtime errors if called. As a workaround, interrupt routines should be compiled at optimization level 0 or 1. ------------------------------------------------------------------------------ FIXED SDSCM00031215 ------------------------------------------------------------------------------ Summary : Compiler generates incorrect call to wrong library divide routine Fixed in : 3.2.1 Severity : S1 - Critical / PS Affected Component : C/C++ Compiler (cl) Description: The compiler could generate an incorrect divide routine call in some expressions that mix signed and unsigned types. ------------------------------------------------------------------------------ FIXED SDSCM00031217 ------------------------------------------------------------------------------ Summary : macro subsitution failure Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Assembler Description: If a label is used an argument to a macro invocation and the macro definition has parameters with the same name the assembler may incorrectly do substitution symbol expansion if the parameter is mapped to another argument. ------------------------------------------------------------------------------ FIXED SDSCM00031282 ------------------------------------------------------------------------------ Summary : MSP430 Linker Option ( --fill_value ) missing in CGT3.2 and may not function as expected Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Linker Description: The --fill_value option currently writes 32-bit values as the fill value. For example, if a fill value of 0xABCD is specified the linker will fill holes 32-bits at a time with the value 0x0000ABCD. As a workaround 'duplicate' a 16-bit value to occupy 32-bits. For example, if the desired fill value is '--fill_value=0xABCD' specify '--fill_value=0xABCDABCD'. Alternatively, specify the fill value in the linker command file. ------------------------------------------------------------------------------ FIXED SDSCM00031626 ------------------------------------------------------------------------------ Summary : Optimizer (O2 or O3) generates Internal Error Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Optimizer ------------------------------------------------------------------------------ FIXED SDSCM00031726 ------------------------------------------------------------------------------ Summary : Assembler does not detect wrong addressing mode for RRUX instruction Fixed in : 3.2.1 Severity : S2 - Major Affected Component : Assembler Description: The assembler did not detect that the destination operand on a RRUX instruction was not a register. The RRUX is valid for register Mode only. ------------------------------------------------------------------------------ 4. 3.2.0 Fixed Defects ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ FIXED SDSCM00030042 ------------------------------------------------------------------------------ Summary : MSP430 CPU Bug Workaround 1144 Fixed in : 3.2.0 Severity : S2 - Major Affected Component : Assembler Description: Workaround/warning enabled through the --silicon_errata=CPU23 shell option. ------------------------------------------------------------------------------ FIXED SDSCM00030045 ------------------------------------------------------------------------------ Summary : MSP430 CPU Bug Workaround 1057/CPU18 Fixed in : 3.2.0 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: Workaround/warning enabled through the --silicon_errata=CPU18 shell option. ------------------------------------------------------------------------------ FIXED SDSCM00030047 ------------------------------------------------------------------------------ Summary : MSP430 CPU Bug Workaround 519/CPU15 Fixed in : 3.2.0 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: Workaround/warning enabled through the --silicon_errata=CPU15 shell option. ------------------------------------------------------------------------------ FIXED SDSCM00030049 ------------------------------------------------------------------------------ Summary : MSP430 CPU Bug Workaround 942 Fixed in : 3.2.0 Severity : S2 - Major Affected Component : Assembler Description: Workaround/warning enabled through the --silicon_errata=CPU21 shell option. ------------------------------------------------------------------------------ FIXED SDSCM00030168 ------------------------------------------------------------------------------ Summary : DWARF line number entry encoding error Fixed in : 3.2.0 Severity : S2 - Major Affected Component : Assembler Description: The DWARF line number information for the last line number entry, representing the last line of the function, can be encoded incorrectly depending on the values of the other line number entries. This is more likely for functions with very few line number entries. ------------------------------------------------------------------------------ FIXED SDSCM00030362 ------------------------------------------------------------------------------ Summary : Optimizer generates segmentation fault with -o2 and higher Fixed in : 3.2.0 Severity : S2 - Major Affected Component : Optimizer Description: A loop nest which may be unrolled-and-jammed -- which requires a specific set of conditions, but is essentially simple loops which can legally have the outer loop unrolled -- whose outer loop's initial value is not explicitly set in the loop may cause the optimiser to crash. ------------------------------------------------------------------------------ FIXED SDSCM00030635 ------------------------------------------------------------------------------ Summary : Incorrect optimization of constant performed with -o2 and higher Fixed in : 3.2.0 Severity : S2 - Major Affected Component : Optimizer Description: A reference to a field of a union, optionally included in some other structure type, may be replaced with an incorrect value if the variable is auto-initialised and const. Ie, given "T const x = {1, 2};" where T is a union, a later "x.a" may be replaced by 2 even though that doesn't correspond to the proper field. ------------------------------------------------------------------------------ FIXED SDSCM00030700 ------------------------------------------------------------------------------ Summary : Symbol specified with .label directive within assembly source file gets linked to run address instead of load address Fixed in : 3.2.0 Severity : S2 - Major Affected Component : C/C++ Compiler (cl) Description: Symbol specified with .label directive within assembly source file gets linked to run address instead of load address ------------------------------------------------------------------------------ 5. 3.2.0B1 Fixed Defects ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ FIXED SDSCM00028799 ------------------------------------------------------------------------------ Summary : The new linker should provide the same detailed information as the old linker when the placement fails. Fixed in : 3.2.0B1 Severity : S2 - Major Affected Component : Linker Description: This bug did not result in any incorrect behavior. The error messages issued in some cases have been expanded to include the appropriate details. ------------------------------------------------------------------------------ FIXED SDSCM00028896 ------------------------------------------------------------------------------ Summary : Optimizer loses track of signed/unsigned distinction in loop transormation Fixed in : 3.2.0B1 Severity : S2 - Major Affected Component : Optimizer Description: A loop whose index variable is unsigned and whose increment is difficult to divide by (eg, not a power of 2) may not execute the correct number of iterations when the initial value (when counting down) or final value (when counting up) is large enough to overflow the signed type with the same width as the index variable's unsigned type. In this case, the variable was unsigned-short (16-bit), the loop counted down by 2560, and the initial value was 37890. ------------------------------------------------------------------------------ FIXED SDSCM00028922 ------------------------------------------------------------------------------ Summary : Optimizer terminates abnormally for all optimization levels higher than -o0 Fixed in : 3.2.0B1 Severity : S2 - Major Affected Component : Optimizer Description: The optimiser may abort on functions containing "switch" statements when the set of case labels is relatively small and compact, the switch has a default case, the test expression is a simple variable or memory reference, and the lowest label value isn't 0. ------------------------------------------------------------------------------ FIXED SDSCM00029047 ------------------------------------------------------------------------------ Summary : Assembler gives segmentation fault for incorrectly written instruction Fixed in : 3.2.0B1 Severity : S2 - Major Affected Component : Assembler Description: Assembler sometimes generates a segmentation fault for an incorrectly written instruction. ------------------------------------------------------------------------------ FIXED SDSCM00029525 ------------------------------------------------------------------------------ Summary : The linker in late template instantiation opens a file for READ and then for READ-WRITE without first closing the file Fixed in : 3.2.0B1 Severity : S1 - Critical / PS Affected Component : Linker Description: It is possible that a read of an object file can occur while that same object file has already been opened by the linker for a read. This could cause errors in parallel build systems. This can only occur with C++ code requiring template instantiations. ------------------------------------------------------------------------------ 6. Current Known Issues ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008248 ------------------------------------------------------------------------------ Summary : Compilers on PC will not work without TMP set Affected Component : C/C++ Compiler (cl) Description: When compiling on the PC, the code generator cannot find the icode file produced by the parser if the environment variable TMP is no set. If TMP is set, then all appears well. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008251 ------------------------------------------------------------------------------ Summary : Printf format '%#04x' fills zeros into wrong location Affected Component : Code Generator ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008276 ------------------------------------------------------------------------------ Summary : Linker accepts illegal address ranges and truncates to a valid address Affected Component : Linker Description: Linker accepts illegal address ranges and truncates to a valid address without any warnings. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008340 ------------------------------------------------------------------------------ Summary : directory name with '(' character causes linker error Affected Component : Shell ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008465 ------------------------------------------------------------------------------ Summary : Codegen crash because of void pointer dereference Affected Component : Parser ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008537 ------------------------------------------------------------------------------ Summary : assembler expression ~(0x80000000) evaulates as 0x80000000 Affected Component : Code Generator ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008543 ------------------------------------------------------------------------------ Summary : Forward reference in .space generates an internal error Affected Component : Assembler Description: If you attempt to assemble .space 0+a b a .set 1 the assembler will generate an internal error. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008630 ------------------------------------------------------------------------------ Summary : printf gives wrong value for pointer when its value is incremented Affected Component : C/C++ Compiler (cl) ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008652 ------------------------------------------------------------------------------ Summary : pow(2,x) has fairly significant rounding error Affected Component : Runtime Support Libraries (RTS) ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008928 ------------------------------------------------------------------------------ Summary : Extern inline functions are not supported in the C/C++ Compiler Affected Component : Parser ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00008930 ------------------------------------------------------------------------------ Summary : C++ allows enumerators larger than 'int' but compiler does not Affected Component : Parser ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00009815 ------------------------------------------------------------------------------ Summary : printf gives wrong value for pointer when its value is incremented Affected Component : C/C++ Compiler (cl) ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00013456 ------------------------------------------------------------------------------ Summary : fgets in _IONBF mode does not respect size limit Affected Component : Runtime Support Libraries (RTS) Description: The second argument to fgets() is the maximum number of chars to read. In _IONBF mode, fgets() reads until end-of-line, potentially overrunning the input buffer. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00014430 ------------------------------------------------------------------------------ Summary : calloc doesn't check arguments to make sure the requested size is reasonable Affected Component : Runtime Support Libraries (RTS) Description: The function calloc() is required to return a pointer to memory representing "nelem" copies of "size" bytes, or NULL if the request cannot be satisfied. However, for some values of "nelem" and "size" (specifically when the result of nelem*size wraps around), calloc can return a pointer to an object that is not large enough, rather than NULL. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00016782 ------------------------------------------------------------------------------ Summary : linker is giving a reference error for a dead function Affected Component : Linker ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00018691 ------------------------------------------------------------------------------ Summary : Linker gives misleading warning when dot expressions used in SECTION directive for .stack section Affected Component : Linker Description: Linker gives the warning warning creating ".stack" section with default size of 0x800; use the -stack option to change the default size even when the application does not link in boot code from RTS lib. ------------------------------------------------------------------------------ KNOWN ISSUE SDSCM00030125 ------------------------------------------------------------------------------ Summary : Linker generates confusing error message and fails Affected Component : C/C++ Compiler (cl)