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