Closed Defects in Release

ID Summary State Reported In Release Target Release Workaround Release Notes
CODEGEN-4419 Compiler erroneously speculates indexed load from the stack Fixed C6000_7.4.0B1 C6000_7.4.24 Modify the source code of the offending function to make local variables "volatile." There's no obvious way to pre-determine that a function will suffer from this bug; you just have to wait for the bug to happen, look at the line number of the offending instruction (which will always be a load with indexed addressing with base register SP), and go to the function at that line number. Make every local variable in that function "volatile." If it's a C++ function, you may need to make the function "volatile." The compiler moves instructions from one block to another to increase parallelism. Usually this is done by predicating (adding a condition to) every instruction that is moved above a branch. However, in some cases, the compiler will "speculate" the instruction, which means removing the condition entirely. This is done when the instruction's side-effects are judged to be safe, such as load of a local variable. In the case that the instruction's condition would have been false, this load will be useless, but at least it will be safe, because the stack pointer (SP) is at a legal location, and there won't be a memory fault. However, when a local variable's value is read with an indexed expression, the index register is not necessarily speculated exactly when the load is, so the index register may have a garbage value. In this test case, the load was speculated, but the index register definition wasn't, so in the false branch, the computed address was garbage, and we would read a random memory address, causing a memory fault. (Even though SP was perfectly valid, the index register was garbage, so SP+index might point anywhere in memory.)
CODEGEN-3597 ELF header field e_phoff should be 0 when no program header is present Fixed C6000_7.4.0B1 C6000_7.4.23 ELF header field e_phoff should be 0 when no program header is present, and ELF header field e_shoff should be 0 when no section headers are present.
CODEGEN-3571 Temp filename collisions on Windows in linear assembler Fixed C6000_7.4.0B1 C6000_7.4.23 Disable parallel builds of linear assembly source files. When compiling multiple linear assembly jobs in parallel, it is possible to get the error message: Unable to open temp macro library : %TEMP%\tempTI - Aborting
CODEGEN-2401 Compiler crashes during software pipelining Fixed C6000_7.4.0B1 C6000_7.4.23 Use option --disable_software_pipeline, or do not use option --interrupt_threshold For a given loop for which we attempt software pipelining, if every attempt to pipeline the loop fails, there is a chance the compiler could perform and out-of-bounds array read, leading to unpredictable results, up to and including the compiler crashing with an internal error of some sort. The bug can only happen at --opt_level=2 or higher. This can only happen if every software pipelining attempt fails; this likelyhood tends to be aggravated by using the option --interrupt_threshold When encountering this bug, this program is more likely to crash on Windows than on Linux.
CODEGEN-2346 Compiler produces incorrect code at -o2 optimization Fixed C6000_7.4.0B1 C6000_7.4.22 None known. Compiler may produce incorrect code at -o2 or greater optimization when given irregular loops.
CODEGEN-2286 palign(8) of .init_array messes up __TI_INITARRAY_Limit address Fixed C6000_7.4.0B1 C6000_7.4.23 In the linker command file, replace .init_array > FLASH, palign(8), fill = 0xffffffff with the following GROUP statement: GROUP { .init_array } > FLASH, palign(8) The palign(8) on GROUP will ensure that any required padding is added after .init_array. However, both the size of .init_array and the value of __TI_INITARRAY_Limit remain unchanged. Applying palign(8) to .init_array caused __TI_INIT_ARRAY_Limit to be set to the end of .init_array including the padding. This broke RTS startup code responsible for calling constructors because the table of constructors now includes invalid data. This bug has been fixed and __TI_INIT_ARRAY_Limit is no longer affected by padding.
CODEGEN-2214 Compiler optimizes away function which calls assert Fixed C6000_7.4.0B1 C6000_7.4.22 Make sure there is some other visible effect in the function -- a call, a use of a volatile variable, something like that. A function whose only visible effect is to call assert() may be optimised away at --opt_level=0 or higher.
CODEGEN-2113 Hex utility mishandles space in directory name of output file Fixed C6000_7.4.0B1 C6000_7.4.22 Use directory names without spaces for output files. The hex utility did not correctly handle spaces in output directory and file names.
CODEGEN-2098 Temp filename collisions on Windows with many parallel invocations Fixed C6000_7.4.0B1 C6000_7.4.22 In some cases with a large number of compilations in parallel on Windows, the compiler could create temporary files with colliding names, resulting in strange compilation failures.
CODEGEN-2053 Compiler incorrectly reorders struct assign for small, volatile structs with bit-fields Fixed C6000_7.4.0B1 C6000_7.4.21 Use optimization level 0 or off (option --opt_level) For a very specific optimization, the optimizer may drop a volatile qualifier from a struct assignment. In some cases, the compiler may later perform an incorrect optimization, most commonly incorrectly reordering volatile assignments. This bug can only happen in a function compiled with optimization level 1 or higher which contains both of the following: 1) A struct assign where the destination is volatile, and the source is a known constant, and the struct contains a bit-field, and the struct is of size "int" or smaller. 2) Any bit-field access (read or write) other than as part of a struct assign or initialization expression. That is, the name of the bit-field is present in the access expression. Note that the optimizer can create this situation by inlining functions, so 1 and 2 might be in different functions in the source code. Consider a tree x = y where x and y are of type struct S. If the value of y is known at compile time (e.g. a const value), the optimizer will try to turn the struct constant into an integer constant (possibly combining bit-fields) and rewrite the tree to look like this: "(unsigned *)x = 32;" However, if y is volatile, that should be "*(volatile unsigned *)x = 32;" Because the access is not volatile, instruction scheduling could cause this instruction to drift past nearby volatile accesses.
CODEGEN-2039 Parser crashes on a struct that uses designated initialisers and anonymous unions Fixed C6000_7.4.0B1 C6000_7.4.21 Avoid designated initialisers and use the old positional method, or keep the designated initialisers but name the field containing the union (which may require adjusting the names of the designated initialisers). The parser component of the compiler will crash sometimes when given a struct that is initialised with gcc-style designated initialisers.
CODEGEN-1976 Value of __cplusplus is wrong Fixed C6000_7.4.0B1 C6000_7.4.21 If possible, use the -ps or --strict_ansi options. This mode will use the strict definition of __cplusplus, which is 199711L. Our parser mimicked G++ behavior for the value of this macro in relaxed ANSI mode. This reproduced a bug in G++ versions v.4.7 and v.4.3 that has since been fixed.
CODEGEN-1703 Designated initializer plus struct hack hangs compiler Fixed C6000_7.4.21 Avoiding using string constants to initialize objects with flexible array members. Instead, use a brace-initialized array. For example: struct { int a; char b[]; } mystruct = {0, {'h', 'e', 'l', 'l', 'o'} }; Fixed a compiler hang caused by initializing flexible array members with string constants. struct {int a; char b[]; } mystruct = {0, "hello"} /* Would cause the compiler to hang and/or crash */
CODEGEN-1658 SPLOOP Missed Stall Exception with Debugger Fixed C6000_7.4.19 C6000_7.4.20 None. A hardware bug on C6000 prevents the debugger from working correctly within certain instruction sequences in an SPLOOP.
CODEGEN-1649 Warning "INLINE recursion limit exceeded" during RTS build Fixed C6000_7.4.0B1 C6000_7.4.20 None, for the automatic library builds. Elsewhere, one can use the hidden --inline_recursion_limit option to increase the limit above the default 10. The compiler may emit the warning "INLINE recursion limit exceeded," but there is no way to suppress the warning, and it really isn't useful for the typical compiler user. These changes remove the warning.
CODEGEN-1441 Compiler generates software pipelined loop that has multiple assignment code, and is not interrupt safe Fixed C6000_7.4.4 C6000_7.4.19 If the specific code sequence causing the issue can be located in the assembly source, then a user may insert a DINT instruction in front of the multi-cycle instruction and a RINT instruction after the last delay slot of the multi-cycle instruction. The compiler will mistakenly define and use a register that is defined by a preceeding multi-cycle instruction while the definition of the value created by the multi-cycle instruction is still in the process of being written to that register. If an interrupt occurs between the delay slot definition of that register and the delay slot use of that register, then an incorrect value will arrive in the register for the delay slot use of the register. For example, MPYLI .M1X A4,B6,A5:A4 MVK .S1 2380,A3 || ADD .L1X A3,B8,A5 ADD .L1 A3,A5,A9 LDHU .D1T1 *A9,A5 NOP 1 ... In the above code, if an interrupt occurs in the delay slots of the MPYLI instruction, between the definition of A5 and the subsequent use of A5, then the value in A5 used by the second ADD instruction will be the value that was written to A5 by the MPYLI instruction instead of the first ADD instruction.
CODEGEN-1429 Software pipelined loop generates different results than loop not pipelined Fixed C6000_7.4.0B1 C6000_7.4.20 Avoid unsigned expressions in subscripts or in computing subscripts, or compile with -o1 or -o0.
CODEGEN-1333 Structure assignment causes compiler to fail with INTERNAL ERROR: Decomposition error Fixed C6000_7.4.18 C6000_7.4.19 Replace struct assignments involving packed structures with a memcpy() call to copy the contents of the RHS of the struct assign to the LHS.
CODEGEN-1272 Compiling with optimization level o2 and higher triggers an exception Fixed C6000_7.4.0 C6000_7.4.20 Compile affected C/C++ source file with "--disable:pc" compiler option In some cases where the compiler generates a non-SPLOOP software pipelined loop which has a large iteration interval, the compiler may determine that it is OK to speculatively execute a load instruction when it shouldn't. This can lead to the compiler generating code which, when executed, will try to access an illegal data address with a load instruction whose address operand is pointing to an illegal address. The result at run time is a hardware exception.
SDSCM00052889 uint16_t value not truncated as it ought to be in if test using -O2 Fixed C6000_7.4.0B1 C6000_7.4.18
SDSCM00052887 Compiler produces incorrect code for C674x at -O2 Fixed C6000_7.4.0B1 C6000_7.4.18 Place #pragma UNROLL(1) immediately before the loop
SDSCM00052833 Linker INTERNAL ERROR with object files with DWARF information compiled by IAR compiler Fixed C6000_7.4.0B1 C6000_7.4.18 Add option --compress_dwarf=off
SDSCM00052805 Decomposition error on while(*ptr++) where ptr points to volatile Fixed C6000_7.4.8 C6000_7.4.17 No workaround.
SDSCM00052721 lnk6x automatic RTS selection does not work when thread-safe version of RTS is needed Fixed C6000_7.4.0 C6000_7.4.17 Explicitly specify the thread-safe version of the RTS library that is to be included in the link instead of using libc.a on the link command line or in the linker command file.
SDSCM00052699 Compiler discards write to a volatile local struct member Fixed C6000_7.4.0B1 C6000_7.4.17 No workaround.
SDSCM00052397 Optimizer crashes on unreachable integer divide-by-zero Fixed C6000_7.4.0B1 C6000_7.4.16 None.
SDSCM00052374 COMDAT functions may be incorrectly specialized when using -o4 Fixed C6000_7.4.0B1 C6000_7.4.17 None.
SDSCM00052372 Predicated instruction causes uninitialized register to be written to memory Fixed C6000_7.4.0B1 C6000_7.4.16 None.
SDSCM00052339 demangler --output option does not work at all Fixed C6000_7.4.0B1 C6000_7.4.15 armdem file.asm > file.dis
SDSCM00052292 Certain cases of array-typed struct member followed by non-array member cause incorrect code Fixed C6000_7.4.9 C6000_7.4.16 Put all array-typed members of the struct at the end. The problem is with array members that appear immediately before non-array members.
SDSCM00052281 ARM Parser Segfaults on OSX at Template Class Fixed C6000_7.4.9 C6000_7.4.16 None.
SDSCM00052257 Use of --opt_level=4 causes link to fail with message symbol "name" redeclared with incompatible type Fixed C6000_7.4.0B1 C6000_7.4.16 Change all anonymous members of the types involved to have an explicit name.
SDSCM00052251 Use of --preferred_order options, as indicated by clt6x, causes excessive link time Fixed C6000_7.4.14 C6000_7.4.17 None.
SDSCM00052214 FOR-loop containing IF-statement will unroll incorrectly if followed by infinite loop Fixed C6000_7.4.0B1 C6000_7.4.16 Use "#pragma UNROLL(1)" to inhibit unrolling, which avoids the problem. Move either the problem loop or the infinite loop into a separate function, and make sure they don't inline. Compile at -o1 or -o0, which will also inhibit unrolling and avoid the problem.
SDSCM00052186 Saturation of an int32 value to [-32768,32767] may give incorrect results for negative values Fixed C6000_7.4.0B1 C6000_7.4.15 Storing the result of the saturation to an int16 may avoid this issue. To completely avoid this behavior, lower or disable optimization.
SDSCM00052185 In certain cases at opt_level=2 or higher, compiler gets load and store instructions in the wrong order Fixed C6000_7.4.0B1 C6000_7.4.15 Retain "volatile" in the cast, or remove it from the definition.
SDSCM00052144 RTS libraries do not get automatically built if the library is missing (Mac OS X) Fixed C6000_7.4.9 C6000_7.4.16 Copy the libraries from a Windows/Linux machine.
SDSCM00052123 Complicated expression to write then read a 8-bit char is emitted in backwards order. Fixed C6000_7.4.0B1 C6000_7.4.15 Compile at -o1 or -o0, or, since the situation has something like "a->b->c->d = x; switch (a->b->c->d) ...", use "switch (x) ..." instead. The bug involves the ordering of the write and read to the "d" field, and if there is no read then there is no ordering problem.
SDSCM00052114 Windows Stack Size for Parser Should be Raised Fixed C6000_7.4.0B1 C6000_7.4.15 There are at least two options: 1. On Windows, if you have Visual Studio available, the stack for an executable may be raised with editbin. For example, to raise the stack to 8MB for the acpia6x parser, you would use: editbin /stack:8388608 acpia6x.exe 2. Use the linux toolchain. The default stack is much higher. Even if that limit is reached, the soft limit for the stack size of user applications may be raised with ulimit. For example, to raise the stack to 16MB, you would use: ulimit -S -s 16384 (This could be placed in the startup script, such as .bashrc)
SDSCM00052029 Function alias resolution corrupts EXIDX lookup Fixed C6000_7.4.13 C6000_7.4.16 Remove the use of the --unused_section_elimination=off linker option from the linker command file or the command-line used to invoke the linker. Use of this option disables the linker's ability to eliminate unreferenced code sections from the link. It is a problem in this case because one unreferenced code section causes its associated EXIDX input section to be kept in the link. A reference to an aliased symbol inside the EXIDX input section proves to be problematicc for the linker.
SDSCM00052014 Cannot read files with inode > 4B Fixed C6000_7.4.0B1 C6000_7.4.15 None.
SDSCM00051958 Linker incorrectly splits text section. Section .text.1 is too long. It overwrites the trampoline at the start of .text.2 Fixed C6000_7.4.0B1 C6000_7.4.15 Disabling split placement of the section will avoid this issue. Otherwise --disable_early_consolidation will also avoid this behavior.
SDSCM00051867 Compiler calls C++ delete[] function with incorrect argument values Fixed C6000_7.4.0B1 C6000_7.4.15 Construct and destruct the array without the typedef.
SDSCM00051866 Software pipeline spilling may result in incorrect code Fixed C6000_7.4.0 C6000_7.4.15 Disabling software pipelining will avoid this behavior. (--disable_software_pipeline)
SDSCM00051762 Dot expression adding align(64) computes hugely incorrect size Fixed C6000_7.4.0B1 C6000_7.4.15 None.
SDSCM00051708 Loop downcounter may be mistakenly typed too small Fixed C6000_7.4.0B1 C6000_7.4.15 Lower the level of optimization.
SDSCM00051636 The --rom option should not be exposed for any target except C6000 Fixed C6000_7.4.0B1 C6000_7.4.15 None.
SDSCM00051607 Compiler may vectorise shorts with incorrect alignment Fixed C6000_7.4.0B1 C6000_7.4.15 Compile at -o1 or -o0, or use compiler versions 7.3.1 and earlier or 7.5.0 and later. There may also be a way to force the stack to be aligned at the right time to prevent the error, but I haven't found it.
SDSCM00051591 Linker fails to add padding between trampoline and .switch section. Causes Fetch Packet Exception. Fixed C6000_7.4.0B1 C6000_7.4.14 Placing data (.switch, .const, etc.) in a separate section from code (.text) will avoid this behavior.
SDSCM00051584 Building without optimization causes code generation pass to crash Fixed C6000_7.4.0B1 C6000_7.4.14 This behavior may be alleviated by enabling optimization so that code size is reduced.
SDSCM00051485 Incorrect reordering of nested op= with ++ Fixed C6000_7.4.0B1 C6000_7.4.20 Don't embed "X op= Y++" under another assignment operator. An expression like "a += b += c++" will produce the wrong answer. The problem is specific to sub-expressions of the form "X op= Y++" that occur under another assignment operator.
SDSCM00051472 Conditionals that use shift operator may be optimized out Fixed C6000_7.4.11 C6000_7.4.14 This behavior may be avoided by lowering the optimization level to -o1 or -o0. Moving the conditional check result to a variable so that the shift is not in the conditional may in some cases also avoid this behavior.
SDSCM00051463 Automatic library resolution fails when a a load image file is included in the link Fixed C6000_7.4.0B1 C6000_7.4.13 Specify the specific library to link against instead of using libc.a.
SDSCM00051346 After unrolling loop, compiler ignores the iterations left over Fixed C6000_7.4.0B1 C6000_7.4.13 Use "#pragma UNROLL(1)" to inhibit unrolling, or compile with -o1 or -o0. In at least some cases, using -ms1 or greater, or -mf2 or less, will also inhibit unrolling in a way that avoids the problem.
SDSCM00051314 Under --opt_level=3 compiler generated code ignores pointer check for NULL present in the source Fixed C6000_7.4.0B1 C6000_7.4.13 Compile at -o1 or -o0.
SDSCM00051273 Performance degrades moving from v7.2.8 to v7.4.11 Fixed C6000_7.4.0B1 C6000_7.4.13 Use signed-int loop variables instead of types shorter than int.
SDSCM00051241 Output section splitting creates a zero-length section Fixed C6000_7.4.0B1 C6000_7.4.12 1) Do not split the section in question. 2) Change the zero-length section so that it has at least one more byte.
SDSCM00051234 asm(" nop 5") changes position with another asm statement Fixed C6000_7.4.11 C6000_7.4.13 Disable the pipeliner (option -mu) for files containing affected inline assembly statements.
SDSCM00051143 Need compiler fix for SPLOOP-SPKERNEL-interrupt bug Fixed C6000_7.4.0B1 C6000_7.4.13 There are two possible workarounds for customers using compilers that don't have the compiler workaround (pre-7.3.20 and pre-7.4.8): (1) Use --disable:sploop on those files whose loops are susceptible to the HW defects (see description of the silicon defects, above). (2) Disable interrupts around the inner loops that are susceptible to the HW defects with the intrinsics _disable_interrupts(), _enable_interrupts(), and _restore_interrupts(...). Please see section 7.5.9 of the TMS320C6000 Optimizing Compiler v7.6 User's Guide, spru187v for guidance on proper usage of these intrinsics.
SDSCM00051097 Output section splitting creates a zero-length section Fixed C6000_7.4.0B1 C6000_7.4.12 1) Do not split the section in question. 2) Change the zero-length section so that it has at least one more byte.
SDSCM00050997 lnk6x does not pad code sections properly when user specifies non-zero fill value Fixed C6000_7.4.9 C6000_7.4.12 Problem can be worked around by using a more innocuous fill value. A 0x00000000 fill value is preferred since it encodes as a single cycle NOP in an output section containing executable code.
SDSCM00050996 The file misra.txt is not included with MSP430 and C6000 compiler tools installation Fixed C6000_7.4.0B1 C6000_7.4.12
SDSCM00050992 The optimizer should not make a symbol an alias if it has either the location or code_section pragmas applied. Fixed C6000_7.4.0B1 C6000_7.4.13 Available workarounds are to: 1. Reduce the optimization level to -o2. 2. If using a COFF abi, you can move the functions into separate files. 3. Add an __asm("NOP") to the function which will prevent an alias from being created.
SDSCM00050960 Array memory allocated by new is not initialized to 0 Fixed C6000_7.4.7 C6000_7.4.12 Manually initialize memory.
SDSCM00050811 Linker fails with INTERNAL ERROR: lnk2000 experienced an unhandled exception Fixed C6000_7.4.9 C6000_7.4.11 Remove C preprocessor directives from linker command files.
SDSCM00050764 Bound function has incorrect address in DWARF debug info Fixed C6000_7.4.0B1 C6000_7.4.12 Set a breakpoint at the bound function and run to it, rather than attempting to step into it.
SDSCM00050725 Hang/crash in partitioning for C674x Fixed C6000_7.4.0B1 C6000_7.4.12 Use -o0.
SDSCM00050603 Variable write not happening in inlined CPP function Fixed C6000_7.4.7 C6000_7.4.11 Compile at -o1 or -o0.
SDSCM00050597 Backward reference to array-in-struct may miss an alias Fixed C6000_7.4.0B1 C6000_7.4.11 Insert a field between the two arrays that has a different element type, or move the troublesome array to the beginning of the struct, or compile at -o1 or -o0. The key details are adjacent array fields of the same element type and an array index with a negative offset.
SDSCM00050554 cmp6x (compressor) fails with error message "Backtracked too many times" Fixed C6000_7.4.8 C6000_7.4.9 Use the --no_compress option. Code size will likely be worse.
SDSCM00050520 strip crashes on files with more than 64k sections Fixed C6000_7.4.0B1 C6000_7.4.9 Don't strip the file
SDSCM00050512 Compiler does not handle control-C signal as expected Fixed C6000_7.4.8 C6000_7.4.9 Later compiler releases (7.6.x and above) do not suffer from this problem.
SDSCM00050505 TDEH emergency buffer should be allocated on stack Fixed C6000_7.4.0B1 C6000_7.4.12 Allocate more space to .sysmem
SDSCM00050365 openMP parser emit error message for #pragma omp critial (name) Fixed C6000_7.4.8 C6000_7.4.9 pragma critical with a name is generating an error message when the name was not a variable declared in the compilation unit. Remove the name or use the name of a variable that is declared in the compilation unit.
SDSCM00050243 Scary but harmless warning: FAILURE in mark_use_of_function_local_static() Fixed C6000_7.4.0B1 C6000_7.4.9 Avoid -pm or -o4. But the warning doesn't indicate any change of the compiler's behavior, so you might as well ignore it.
SDSCM00050202 MISRA-C rule 19.11 false positive Fixed C6000_7.4.0B1 C6000_7.4.9 Disable MISRA-C rule checking for 19.11 around the affected lines: #pragma CHECK_MISRA("-19.11") ... #pragma RESET_MISRA("19.11")
SDSCM00050194 Compiler turns x+I*y into a complex multiplication and addition rather than just pack them Fixed C6000_7.4.0B1 C6000_7.4.9 Use __I__ instead of I
SDSCM00050051 Table driven exception handling code does not check for malloc returning NULL Fixed C6000_7.4.0B1 C6000_7.4.12 Allocate more space to .sysmem
SDSCM00050023 SIGSEGV when using pragma on a template function Fixed C6000_7.4.0B1 C6000_7.4.8 Do not apply any pragma to a template function. Move the function outside the template class.
SDSCM00050014 Missing copyright notice on mklib.c source Fixed C6000_7.4.0B1 C6000_7.4.8 Not applicable
SDSCM00050005 Compiler mistakenly issues MISRA diagnostic 12.9 for a float point type Fixed C6000_7.4.0B1 C6000_7.4.18
SDSCM00049997 Loop with volatile loop control expression removed Fixed C6000_7.4.0B1 C6000_7.4.9 Declare the loop counter variable as volatile
SDSCM00049832 Using optimization causes incorrect result Fixed C6000_7.4.7 C6000_7.4.8 There is no work around for this bug.
SDSCM00049603 C Initialization records are created for NOLOAD sections Fixed C6000_7.4.0B1 C6000_7.4.8 Specify the type as NOINIT in addition to NOLOAD
SDSCM00049539 Vector code with variables of same name (as thru inlining) may produce wrong answers Fixed C6000_7.4.0B1 C6000_7.4.8 Compile at -o1 or -o0, or inhibit inlining of the functions that matter. It may also work to add "#pragma UNROLL(1)" to relevant loops to inhibit vectorisation.
SDSCM00049509 SET_DATA_SECTION does not work if issued from within a _Pragma operator Fixed C6000_7.4.0B1 C6000_7.4.7
SDSCM00049421 Auto-generated stress test terminate abnormally in optimizer Fixed C6000_7.4.0B1 C6000_7.4.8 Compile at -o0; since the test case involves no loops or control flow, that's no less efficient than higher optimisation levels. Or reduce the size of the test case, as mentioned in the original report. Or use two or more accumulators, combined at the end, instead of one single accumulator; that reduces the maximum statement size.
SDSCM00049407 FAILURE in optimizer on local static variables with --opt_level=4 Fixed C6000_7.4.0B1 C6000_7.4.7 Ignore the message "FAILURE in mark_use_of_function_local_static."
SDSCM00049271 INTERNAL ERROR results when building code that uses features from C++ testing framework Fixed C6000_7.4.6 C6000_7.4.7 declare VAR as "extern const int VAR = 1;"
SDSCM00049229 Symbols are missing in .debug_pubnames part of the Dwarf information Fixed C6000_7.4.0 C6000_7.4.7 There is no work around for this bug.
SDSCM00049206 #pragma CLINK does not work on initialized data Fixed C6000_7.4.0B1 C6000_7.4.7 Only uninitialized data can be marked CLINK. To make data CLINK, make it unitialized and do the initialization at startup.
SDSCM00049035 Value of "weak" global incorrectly propagated into function Fixed C6000_7.4.0B1 C6000_7.4.7 Do not use an explicit initializer with weak symbol definitions, or use optimization level -o2 or lower.
SDSCM00048895 Sometimes a loop iterates one time too many, when built with --opt_level=2 Fixed C6000_7.4.4 C6000_7.4.7 There is no work around for this bug.
SDSCM00048747 Using END(sym_name) or SIZE(sym_name) on .cinit can cause link to fail Fixed C6000_7.4.0B1 C6000_7.4.7 Avoid the use of the END() or SIZE() operators for .cinit or other compressed sections.
SDSCM00048712 ARM assembler seg faults on certain input Fixed C6000_7.4.0B1 C6000_7.4.7 Add the '#' in front of the 0x40004000 to produce the correct "Invalid addressing mode" error.
SDSCM00048498 MISRA-C rule 12.8 incorrectly reported for an expression like ((uint32_t)2U << 8U); Fixed C6000_7.4.0B1 C6000_7.4.7 None.
SDSCM00048440 SIGSEGV when using MISRA checks on code with an anonymous struct Fixed C6000_7.4.0B1 C6000_7.4.7 Do not use anonymous structs or unions when using MISRA
SDSCM00048378 Compiler incorrectly generates UDIV (and __aeabi_uidivmod) on 'signed long' local variable. Fixed C6000_7.4.0B1 C6000_7.4.6 Compile with -o1 or -o0. The undocumented option --vectorize=off will also avoid the pass with the problem, but may have other effects. The problem is limited to ARM v6 (except v6m0) and v7 and C6000.
SDSCM00048289 Errors of the linker due to the difference in version of CGT Fixed C6000_7.4.3 C6000_7.4.7 The problem can be avoided by using memory range names that are different from section names. For example, this linker command file may cause the error because "RAM" is both a memory range name and a section name: MEMORY { RAM : } SECTIONS { RAM : > RAM } But this one would not cause the error: MEMORY { RAM_MEM : } SECTIONS { RAM : > RAM_MEM } Also okay: MEMORY { RAM : } SECTIONS { RAM_SECT : > RAM }
SDSCM00047883 bsearch failure when using -pr relaxed ANSI mode or --gcc mode from C++ Fixed C6000_7.4.0B1 C6000_7.4.6 A workaround is to use --strict_ansi.
SDSCM00047774 In some cases, compiler fails to use unaligned load when reading members of a packed structure Fixed C6000_7.4.4 C6000_7.4.5
SDSCM00047666 Definition of SIZE_MAX is wrong Fixed C6000_7.4.0B1 C6000_7.4.7 None.
SDSCM00047615 std::vector::pop_back failure with -mv6600 -O3 Fixed C6000_7.4.0B1 C6000_7.4.6 Compile at -o0 or -o1.
SDSCM00047564 Valid regpair MV and NEG instructions rejected for C66x Fixed C6000_7.4.0B1 C6000_7.4.6 Use ADD 0,xslong,slong and SUB 0,xslong,slong instead
SDSCM00047563 Disassembler applies X cross path to wrong operand of MPYSPDP Fixed C6000_7.4.0B1 C6000_7.4.5 The encoding is correct; it is only the disassembler that gets it wrong. Don't rely on the disassembler's output for the MPYSPDP instruction if the cross path is used.
SDSCM00047502 linker fails with internal error if .cinit and .data are in the same GROUP Fixed C6000_7.4.0B1 C6000_7.4.6 Move .cinit so that it is not in any GROUP
SDSCM00047263 different binaries after compilation Fixed C6000_7.4.0B1 C6000_7.4.4 "setarch -R" appears to work around the problem on Linux. There are apparently add-on tools for Windows that accomplish the same, or one can fiddle with the registry, but I don't have details.
SDSCM00046955 INTERNAL ERROR: Decomposition error for C66x using packed struct Fixed C6000_7.4.2 C6000_7.4.4 Remove packed pragma.
SDSCM00046910 Using an invalid option with valid hex command file causes SIGSEGV Fixed C6000_7.4.0B1 C6000_7.4.4 Fix or eliminate the invalid option.
SDSCM00046849 stdin stdout stderr macros need to be usable without using namespace std for _ftable Fixed C6000_7.4.0B1 C6000_7.4.4 Include stdio.h instead of cstdio
SDSCM00046848 NOINIT keyword may be ignored Fixed C6000_7.4.3 C6000_7.4.4 None.
SDSCM00046816 Excessive compile time - Optimizer hangs Fixed C6000_7.4.0B1 C6000_7.4.4 None known.
SDSCM00046812 Instructions are placed in the wrong order Fixed C6000_7.4.0B1 C6000_7.4.4 No definite workaround exists. However, changing the optimization level may avoid the problem by changing the stack or memory layout.
SDSCM00046414 Compiler may incorrectly read too soon when single element and aggregate are used together Fixed C6000_7.4.0B1 C6000_7.4.3 Compile at -o1, or use a pointer or global instead of a local array, or add a dummy field to the struct to prevent an aggregate read.
SDSCM00046400 op-assign of float expression to bit-field results in corrupted code Fixed C6000_7.4.0B1 C6000_7.4.3 Assign the value of the floating-point expression into a local integer variable and assign the local variable to the bit-field.
SDSCM00046346 Linker takes too long to link after upgrade to 7.3.X Fixed C6000_7.4.0B1 C6000_7.4.3 Use -b can always to wrok around this long type merging problem. But it is not needed with this fix.
SDSCM00046252 Incorrect call frame debug information generated for Tesla Fixed C6000_7.4.1 C6000_7.4.1
SDSCM00046242 #NAME? Fixed C6000_7.4.4 C6000_7.4.7 Add --abi=eabi
SDSCM00046231 DATA_ALIGN should not be able to reduce alignment below default array alignment Fixed C6000_7.4.0B1 C6000_7.4.4 Use the DATA_ALIGN pragma with an array alignment value of at least 8 for C64x+
SDSCM00046190 Compiler may mishandle C symbols that resemble C++ mangled names (esp long sequences of underscores) Fixed C6000_7.4.0B1 C6000_7.4.3 Don't use variables or functions with long sequences of underscores in C code.
SDSCM00046180 MISRA check 14.1 should not treat while(0) as potential infinte loop Fixed C6000_7.4.0B1 C6000_7.4.7
SDSCM00046177 ELF section header table not guaranteed to be aligned Fixed C6000_7.4.0B1 C6000_7.4.4 None.
SDSCM00046175 INTERNAL ERROR: cg6x experienced a segmentation fault while processing function Fixed C6000_7.4.1 C6000_7.4.4 There is no work around for this bug.
SDSCM00046156 Incorrect calculations in loop Fixed C6000_7.4.0B1 C6000_7.4.4 Move the auto-initialised array out of the loop, or add dummy array elements to make it larger than a candidate vector, or add "#pragma UNROLL(1)" to inhibit vectorisation, or compile at -o1 or -o0.
SDSCM00046144 Internal error during reporting OpenMP error 1510 Fixed C6000_7.4.1 C6000_7.4.5
SDSCM00046142 SUBDP with cross path decoded incorrectly in disassembler Fixed C6000_7.4.0B1 C6000_7.4.4 There is no work around available for this bug.
SDSCM00046084 Hex utility incorrectly picks empty section over a non-empty section with duplicate name Fixed C6000_7.4.0B1 C6000_7.4.4 Use a different output section for the duplicate .text section
SDSCM00046075 disassembler display wrong hex prefix for constant in compact instruction Fixed C6000_7.4.0B1 C6000_7.4.3 No work around for this bug.
SDSCM00046015 Recurrence with unsigned subscript can lead to wrong answer Fixed C6000_7.4.0B1 C6000_7.4.3 Use only signed variables for subscripts and loop index variables, or compile at -o1 or -o0.
SDSCM00045988 Internal error: no match for ASG involving _mem2 Fixed C6000_7.4.0B1 C6000_7.4.0 None.
SDSCM00045894 Use of option -pdse195 causes an incorrect error to be generated Fixed C6000_7.4.0B1 C6000_7.4.3 Compiling without -pdse195 will remove the errors caused by this issue. Alternatively, consider -pdsw195 if the diagnostic should be seen but not bar the program from compiling.
SDSCM00045660 Different code generated on Linux and PC under the same option for the same source code Fixed C6000_7.4.0B1 C6000_7.4.3 None.
SDSCM00045572 #NAME? Fixed C6000_7.4.0B1 C6000_7.4.4 None.
SDSCM00045562 Multiplication by power-of-2 wider than int may use wrong type Fixed C6000_7.4.0B1 C6000_7.4.3 Make the variable the same wider-than-int type as the constant. Casting it may also work. Or compile at -o1 or -o0.
SDSCM00045550 Truncated pointer created by cast from integer constant Fixed C6000_7.4.0B1 C6000_7.4.3 Don't use the optimizer at all for source files which contain pointer math of the form shown in the release notes.
SDSCM00045417 bool and _Bool are not defined correctly in strict ANSI C mode Fixed C6000_7.4.0B1 C6000_7.4.7 The compiler and library now agree on a single definition of bool and _Bool in all modes; its format is equivalent to "unsigned char." Unfortunately, this represents a backward incompatibility with older object files which match all of these conditions: - C source code - includes stdbool.h - compiled in strict C89 mode (the default in older compilers) - module interface uses type _Bool or bool (i.e. a global variable, function argument, or function return value of type derived from bool, or struct containing a type derived from bool.) To work around the problem, either recompile with the latest version of the compiler, or ensure that you aren"t using any _Bool or bool objects in the module interface.
SDSCM00045381 Read of array element, before memcpy() overwrites it, may be out of order Fixed C6000_7.4.0B1 C6000_7.4.3 The test case is using memcpy() to implement a shift register in an array. More efficient, and also avoiding the problem, is to use a circular-queue arrangement: instead of having the head of the queue always be x[0] and implementing a pop by shifting the whole array, have the head be x[head] and implement the pop as head=(head+1)%arraysize. Or use -o1 or -o0.
SDSCM00045373 EXIDX section for alias function leads to INTERNAL ERROR unhandled exception Fixed C6000_7.4.0B1 C6000_7.4.4 Do not use either --unused_section_elimination=off or --retain=.ARM.EXIDX. Neither one should be necessary in a properly-functioning linker, and both make the target footprint larger.
SDSCM00045232 Incorrect linker symbol value after multiple partial links Fixed C6000_7.4.0B1 C6000_7.4.2 Create a large memory region in the linker command files for use during each partial link that defines memory starting at address zero.
SDSCM00045211 Linker GROUP directive fails to allow NOINIT output sections and regular output sections to be together in the group Fixed C6000_7.4.0B1 C6000_7.4.3 None. However, the type keyword should not be applied to GROUPs.
SDSCM00045207 Option --advice:performance_file interface does not work well in CCS build environment Fixed C6000_7.4.1 C6000_7.4.7 This workaround is for CCS. In the text box for the option --advice:performance_file enter ... $<.adv For the source file my_source.c, this causes the advice to be written to my_source.c.adv in the same directory. Feel free to use some extension other than "adv".
SDSCM00045197 strip6x segmentation fault on ELF executable Fixed C6000_7.4.0B1 C6000_7.4.2 The crash occurs when trying to delete an unused ELF segment, which only appear in executable files. Try stripping the object files before linking. As noted previously the problem arises from strip6x trying to delete a segment and exposing a bookkeeping issue. This brings up the question on why it's trying to delete the segment. The section associated with this segment is .plt_resmgr_handles, which looks like it contains the uninitialized variable 'gGlobalFreeQHnd'. The test case file's segment table entries don't look quite right so this may also be an issue in how this file was linked. It looks like .plt_resmgr_handles is allocated with .text into the same segment (uninitialized and initialize data/code combined). One thing to try would be to ensure .plt_resmgr_handles is placed into its own section/segment.
SDSCM00045173 Missing qsort and bsearch implementations for comparison functions with C++ linkage Fixed C6000_7.4.0B1 C6000_7.4.3 Declare the comparison function extern "C"
SDSCM00045147 Automatic RTS library build fails for C6713 (coff, LE). Fixed C6000_7.4.0B1 C6000_7.4.6 The error in this case is not a true error and the library can actually still be used without issue.
SDSCM00045110 Prototypes in c6x.h for complex_mpysp and complex_conjugate_mpysp should use __float2_t instead of double Fixed C6000_7.4.0B1 C6000_7.4.15 None
SDSCM00045105 Empty struct as field of parent struct may cause optimizer abort Fixed C6000_7.4.0B1 C6000_7.4.2 Add a dummy field to the empty struct.
SDSCM00045036 Internal error when no suitable delete operator is present in destructor Fixed C6000_7.4.0B1 C6000_7.4.3 The best workaround here is for the user to provide an appropriate operator delete in the class.
SDSCM00044799 pprof6x aborts during compile which uses profile data to analyze the call graph Fixed C6000_7.4.0 C6000_7.4.1 Can possibly avoid the problem by removing the use of --entry_hook option. A more drastic workaround would be to avoid using the --use_profile_info option.
SDSCM00044775 Missed dependence between x[i+4] and x[i] when i unsigned Fixed C6000_7.4.0B1 C6000_7.4.1 Change "i" from unsigned to signed, from UINT32 to INT32.
SDSCM00044738 EABI partial linking omits referenced library functions which refer to unresolved symbols Fixed C6000_7.4.0B1 C6000_7.4.4 There is no work around for this bug.
SDSCM00044735 EXIDX_CANTUNWIND yields invalid memory read Fixed C6000_7.4.0B1 C6000_7.4.1 This bug can only occur when the program is terminating due to a problem with an uncaught exception. To work around the issue, ensure that C++ functions which might be called from a C function catch all exceptions.
SDSCM00044618 lnk6x runs out of memory when using --preferred_order in large application Fixed C6000_7.4.0B1 C6000_7.4.0 Avoid use of --preferred_order option during the link step.
SDSCM00044561 ASG error in cg6x Fixed C6000_7.4.0B1 C6000_7.4.1
SDSCM00044463 gcc packed attribute causes both codegen and optimizer error Fixed C6000_7.4.0B1 C6000_7.4.1 Add "__attribute__((packed))" to all nested structs and unions.
SDSCM00044450 Parser allows virtual base classes that are too large Fixed C6000_7.4.0B1 C6000_7.4.1 Do not allow any object to inherit from virtual base classes with total size larger than approximately 0x7ffff0
SDSCM00044393 Linker silently ignores an output section placement spec with missing ">" in the SECTIONS directive Fixed C6000_7.4.0B1 C6000_7.4.3 Don't omit the ">" in the linker command file.
SDSCM00044377 Disassembler fails to decode LDNDW when scaling mode is used Fixed C6000_7.4.0B2 C6000_7.4.1 This bug does not impact the correctness of the code. Be aware that a .word in a text section might be LDNDW or STNDW.
SDSCM00044302 opt6x emits an invalid symbol uid in the I-file as part of a load speculation advice record Fixed C6000_7.4.0B1 C6000_7.4.0 None.
SDSCM00044285 scanf %[^ mistakenly writes EOF to output Fixed C6000_7.4.0B1 C6000_7.4.2 Negate the scan set manually; don't use the negation operator.
SDSCM00044229 including errno.h causes link-time failure when linked with thread safe RTS Fixed C6000_7.4.0B2 C6000_7.4.0 The problem can be avoided if: - RTS library's errno.h is #included by the file that references 'errno', AND - source file that references 'errno' is recompiled with -D__TI_USE_TLS option
SDSCM00044227 Compiler may not ensure uniqueness of static variables in C++ templates Fixed C6000_7.4.0B1 C6000_7.4.0 1. If a template function, or member function of a template class, has a static varaible, declare the function 'inline'. 2. If a template class has a static data member with initialization by constructor, put the definition of the data member in a .cpp file rather than a .h file.
SDSCM00044183 Compiler aborts with internal error "Corrupted IR detected during check_mve/spilling" with -o2 Fixed C6000_7.4.0B1 C6000_7.4.3 There is no work around for this bug.
SDSCM00044066 opt470 experienced a segmentation fault Fixed C6000_7.4.0B1 C6000_7.4.0 No workaround.
SDSCM00044048 Enabling vectorization produces incorrect code Fixed C6000_7.4.0B1 C6000_7.4.1 Disable vectorization or optimization.
SDSCM00044012 Optimizer crash Fixed C6000_7.4.0B1 C6000_7.4.0 Try "#pragma UNROLL(1)" ahead of the outermost for-loop, or compile with -o1 or -o0.
SDSCM00043966 Second instance of three-operand associative op may miscompile Fixed C6000_7.4.0B1 C6000_7.4.0 Compile at -o1 or -o0, or avoid the situation.
SDSCM00043948 IF predicate with negative integer factor simplifies incorrectly Fixed C6000_7.4.0B1 C6000_7.4.0 None. Avoid the situation.
SDSCM00043874 START() and SIZE() in linker script, changed behavior Fixed C6000_7.4.0B1 C6000_7.4.0B2
SDSCM00043868 Linker cannot find include file specified with relative path Fixed C6000_7.4.0B1 C6000_7.4.0B2 This bug occurs because the linker does not properly reset the source path after processing an #include, causing a second #include to be relative to the wrong path. Any intervening token between the two #include directive will overcome this, as will any macro expansion (even if empty). For example: #define SPACE #include "../first.cmd" SPACE #include "../second.cmd"
SDSCM00043860 Printf format %#06x prints zeros in the wrong place Fixed C6000_7.4.0B1 C6000_7.4.5 Avoid using both # and 0 flags when using the x conversion specifier.
SDSCM00043807 Register initialization lost during instruction predication Fixed C6000_7.4.0B1 C6000_7.4.0B2 No practical workaround
SDSCM00043789 cg6x run out of memory Fixed C6000_7.4.0B1 C6000_7.4.0B2 No work around for this bug.
SDSCM00043770 Intentional alias between two congruent IF tests may simplify incorrectly Fixed C6000_7.4.0B1 C6000_7.4.0 Compile at -o0, or avoid creating aliases and then using both paths to access a single variable.
SDSCM00043740 error in PACKED structure access Rejected C6000_7.4.0B1 C6000_7.4.0B2 There is no workaround for this bug.
SDSCM00043713 Linker fails with internal error Fixed C6000_7.4.0B1 C6000_7.4.1 No workaround
SDSCM00043705 Novel Test failure N1204B03.cpp, N1204B26.cpp Fixed C6000_7.4.0B1 C6000_7.4.0B2 Don't use static-local variables in arguments to function calls.
SDSCM00043700 Stack and aggregates should be 8-byte aligned for C66 Fixed C6000_7.4.0B1 C6000_7.4.0B2
SDSCM00043642 Compiler incorrectly simplifies "(x >> k1) < k2" when k2 is constant smaller than int Fixed C6000_7.4.0B1 C6000_7.4.0B2 Declare k2 as an int instead of a shorter type.
SDSCM00043377 In the generated assembly file comments always say no -ms option even when -ms option is used for the build Fixed C6000_7.4.0B1 C6000_7.4.0B2 None
SDSCM00043376 data array copy got wrong results after calling initTimer() Fixed C6000_7.4.0B1 C6000_7.4.0B2 There is no work around for this bug.
SDSCM00043326 Extremely long (templated) type names may overflow buffer, causing crash Fixed C6000_7.4.0B1 C6000_7.4.0B2 None.
SDSCM00043316 Arithmetic fails in GROUP directive Fixed C6000_7.4.0B1 C6000_7.4.0B2 The constant address may be specified directly rather than through an expression.
SDSCM00043233 Use of -mb option to force 6200 array alignment can result in link failure with rts6200.lib Fixed C6000_7.4.0B2 C6000_7.4.0B2 Manually include --disable_push_pop and --disable_custom_call_conv when using -mb. These options will prevent the generation of C64+ specific symbols that would prevent you from linking against a 6200 RTS library.
SDSCM00043229 Instruction reordering alters logic Fixed C6000_7.4.0B1 C6000_7.4.3 No general workaround is known, aside from compiling with -o0 or -o1.. This specific case can be worked around by removing the extra braces around the bulk of the body of main(), or by inhibiting the inlining of GetPrms().
SDSCM00043223 Compiler may miss alias given struct-of-array-of-structs Fixed C6000_7.4.0B1 C6000_7.4.0B2 In this case, save pointer-written-to-struct in a temp and dereference from the temp instead of re-reading from struct. In general, compile at -o1 or -o0.
SDSCM00043207 Compiler reads from stack frame after releasing it Fixed C6000_7.4.0B1 C6000_7.4.0B2 No direct workaround known if the issue appears, though it's likely that different optimization flags will hide the issue.
SDSCM00043174 Linker fails to honor specific placement for function from RTS library Fixed C6000_7.4.0B1 C6000_7.4.2 Do not include libc.a option.
SDSCM00043152 Optimizer issues information advice using optimizer's temporary symbols instead of using symbols from user code Fixed C6000_7.4.0B1 C6000_7.4.0B2 None. Ignore the bad advice, or try to ascertain which user variable the temp refers to by studying the optimiser comments in the .asm file.
SDSCM00042974 Resource conflict between instruction in SPLOOP and instruction in its epilog causing hardware exception Fixed C6000_7.4.0B1 C6000_7.4.2 This is no work around for this bug.
SDSCM00042914 Linker segfault using partial link output file of C++ source with ELF and exceptions enabled Fixed C6000_7.4.0B1 C6000_7.4.0B2 Re-link partial linked output file with a fixed linker, then perform final link again with the now correct partial link output file.
SDSCM00042867 ftell returns wrong error code in EABI Fixed C6000_7.4.0B1 C6000_7.4.0B2 Go into source for ftell() and fgetpos() and change "errno = 5" to "errno = EFPOS"
SDSCM00042811 printf("%d") with negative values incorrect for printf_support=minimal Fixed C6000_7.4.0B1 C6000_7.4.0B1 Use printf_support=nofloat
SDSCM00042789 Register allocation fails at ii=4, but succeeded in 7.3.0 compiler Fixed C6000_7.4.0B1 C6000_7.4.0B2 No known workarond
SDSCM00042717 Compiler stops with error: "Corrupted IR detected" message Fixed C6000_7.4.0B1 C6000_7.4.0B1 Lowering the optimization level to -o1 will avoid the issue.
SDSCM00042619 Optimizer crashes given unrolled nested loops and lots of aliasing Fixed C6000_7.4.0B1 C6000_7.4.0B1 Add "#pragma UNROLL(1)" (or another small unroll factor, like 2 or 3) in front of the inner loops, to prevent complete unrolling. Using a local scalar temp variable for the outer-loop trip count may also help (and tends to help performance in many cases anyway). Adding "restrict" declarations to some of the pointers may also help. Finally, if the areas copied are contiguous, using memcpy() instead of an explicit loop is likely to be faster, less troublesome, and easier to maintain.
SDSCM00042600 Ill advised enum scalar usage gets MISRA diagnostic, but similar usage of enum array does not Fixed C6000_7.4.0B1 C6000_7.4.3 None.
SDSCM00042581 Linker fails with internal error: lnk6x failed to allocate memory Fixed C6000_7.4.0B1 C6000_7.4.3 This bug can only be triggered if a partial link is performed using the --make_static, --localize or --hide option (the memory allocation failure will occur during the final link, however). Removing that option is one way to avoid this bug. Alternatively, the partial link step may be removed from the build process, if possible.
SDSCM00042444 Expression that multiplies two constants incorrectly triggers MISRA rule 10.1 about implicit conversion Fixed C6000_7.4.0B1 C6000_7.4.3 None.
SDSCM00042417 #pragma WEAK; 'if (f)' gets eliminated even if 'f' is a weak function Fixed C6000_7.4.0B1 C6000_7.4.3 Create a volatile pointer to hold the weak pointer value before using it in any comparisons, including the test in an if statement.
SDSCM00042376 C6000 compiler fails to preserve all the context for an interrupt function which contains an SPLOOP Fixed C6000_7.4.0B1 C6000_7.4.0B2 By adding lines similar to these, you can manually preserve ITSR. #include /* interrupt routine starts here */ unsigned int save_itsr = ITSR; /* loop code here */ ITSR = save_itsr;
SDSCM00042362 Disassembly shows valid instruction, but should reject illegal opcode Fixed C6000_7.4.0B1 C6000_7.4.0B2 No practical workaround
SDSCM00042344 Compiler generates internal error: illegal initialization or segmentation fault Fixed C6000_7.4.0B1 C6000_7.4.4 The seg fault can be worked around if the nested designated initializer is removed: static struct cfg config[] = { // the first definition makes the segmentation fault. Comment it and everything is fine. { .module_id = MODULE_1, .param_length = sizeof(struct module_1_params), .param = (struct module_1_params []){{1}} /* remove this designated initializer */ }, { .module_id = MODULE_2, .param_length = 5, .param = (int[]){0,1,2,3,4} }, { .module_id = MODULE_3, .param_length = 2, .param = (int[]){0,1} } };
SDSCM00042332 Don't generate typeinfo when not used Fixed C6000_7.4.0B1 C6000_7.4.3 None
SDSCM00042292 In EABI mode string literals used in member functions result in static members of the class and not placed in .const:.string Fixed C6000_7.4.0B1 C6000_7.4.0 None
SDSCM00042194 Partial link drops weak function symbol Fixed C6000_7.4.0B1 C6000_7.4.0B2 None
SDSCM00041971 Spurious remark generated from __STDC_VERSION__ ref in stddef.h in C++ mode Fixed C6000_7.4.0B1 C6000_7.4.0B1 Use the -pds=195 switch to avoid the remark.
SDSCM00041434 Compiler optimizes away certain calls to assert() Fixed C6000_7.4.0B1 C6000_7.4.0 Instead of "assert(p)", use "if (!p) assert(0)", which will still abort at the same place under the same conditions, but will have a different error message. More elaborately, implement a function equivalent to assert() but with a different name, that the compiler will not recognise as a system function.
SDSCM00041192 Compiler misreports Misra warning for violation of Misra 9.2 Fixed C6000_7.4.0B1 C6000_7.4.0B1
SDSCM00037672 GCC cast-to-union wrongly rejected in initialization constant Fixed C6000_7.4.0B1 C6000_7.4.6
SDSCM00037422 Incorrect layout in .cdecls struct Fixed C6000_7.4.0B1 C6000_7.4.0B2 None
SDSCM00013456 fgets in _IONBF mode does not respect size limit Fixed C6000_7.4.0B1 C6000_7.4.5 Do not use _IONBF mode
SDSCM00008537 assembler expression ~(0x80000000) evaulates as 0x80000000 Fixed C6000_7.4.0 Please describe the workaround for this problem.

Generated on Wed Feb 21 15:34:34 2018