CODEGEN-5317 |
Ternary (?:) expression with 0/1 result uses type of predicate, not result, when optimised |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS |
MSP430_18.12.0.LTS, MSP430_18.1.4.LTS |
Compile with -Ooff. |
An expression like "(p ? 1 : 0)" can be converted by the compiler into "(p != 0)". If the types of 1 and 0 are wider than int, and the expression is shifted left, as in "(p ? 1UL : 0UL) << 16", then the value shifted will be int instead of the wider type, and the overall value will be incorrect. |
CODEGEN-5187 |
Compiler mishandles signed right-shifts by 16 on targets with 16-bit ints |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS, MSP430_18.12.0.LTS |
MSP430_18.12.0.LTS, MSP430_18.1.5.LTS* |
None known. |
For MSP430 and C2000, a right-shift of a signed long (ie, 32-bit) expression by 16 -- X>>16 -- will be compiled as an unsigned right-shift, which can lead to incorrect sign-extensions in the result. |
CODEGEN-5033 |
Functions in <string> incorrectly return NULL |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS |
MSP430_18.9.0.STS, MSP430_18.1.4.LTS |
Ignore or suppress the warning. |
char_traits<char>::find() and char_traits<wchar_t>::find() return char* and wchar_t*, respectively. In our __string file (included by <string>), they are written to return NULL, which is (void*)0 and not the same type as the declaration, thus producing a warning. We have updated the file to make them return 0, which fixes the warnings. |
CODEGEN-4885 |
See MISRA diagnostics when compiling stdio.h |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS, MSP430_18.12.0.LTS |
MSP430_18.12.0.LTS, MSP430_18.1.5.LTS* |
none |
A program that includes <stdio.h> and checks for MISRA warnings may see some from stdio.h itself, which should not happen. |
CODEGEN-4638 |
When shift counts are higher than 32, compiler sometimes optimizes to an incorrect shift count |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS |
MSP430_18.9.0.STS, MSP430_18.1.2.LTS |
Turn off optimization by using optimization level off.
Otherwise, avoid a left-shift by a constant as an operand of the listed operations. However, compiler optimizations could interfere with this. Try keeping the shift count in a global variable instead of as a literal, or computing the shift separately into a variable (a global or volatile local) and doing the |, +, etc, on the variable. |
Left shifts by 32 or more, as an operand of +, -, &, |, or ^, (eg, ((X<<56) | (Y<<48))) may produce incorrect results. |
CODEGEN-4621 |
Remove COFF global linker symbols from documentation for ELF-only targets |
Fixed |
|
MSP430_18.9.0.STS |
|
|
CODEGEN-4600 |
Warning when using pragma RETAIN with attribute((noinit)) |
Fixed |
MSP430_18.1.0.LTS, MSP430_18.9.0.STS |
MSP430_18.9.0.STS, MSP430_18.1.3.LTS |
|
When using pragma RETAIN with attribute((noinit)) on the same symbol for an EABI target, a .clink directive is erroneously emitted in the assembly file, leading to a warning that the .CLINK directive is being ignored because the symbol already has .RETAIN specified. |
CODEGEN-4307 |
std::addressof ill-formed on targets with different function and data pointer sizes |
Fixed |
MSP430_18.1.0.LTS |
MSP430_18.9.0.STS |
|
std::addressof does not work for targets with differently sized data and function pointers
void f(int) {}
void (*ptr)(int) = &f;
assert(std::addressof(f) == ptr); // Fails to compile |
CODEGEN-4303 |
Abort on using decltype(auto) to declare a type conversion operator |
Fixed |
MSP430_18.1.0.LTS |
MSP430_18.9.0.STS |
|
|
CODEGEN-4274 |
Various standard classes inherit from std::binary_function when they shouldn't |
Fixed |
MSP430_18.1.0.LTS |
MSP430_18.9.0.STS |
|
According to the synopses of headers in C++14, many classes which do not inherit from std::binary_function do inherit from it as an implementation decision.
A sample list are object of the following similar object types:
* std::map::value_compare and std::multimap::value_compare
* std::plus
* std::owner_less |
CODEGEN-4033 |
std::binomial_distribution references undefined function lgamma_r |
Fixed |
|
MSP430_18.9.0.STS |
|
Instantiations of std::binomial_distribution fail to link due to the undefined symbol lgamma_r.
This is a C11 function which is not provided by the TI C library. |
CODEGEN-4020 |
Auto thread_local variable is causing a reference to __cxa_thread_atexit |
Fixed |
|
MSP430_18.9.0.STS |
|
The thread_local specifier, when applied to variables, should currently be ignored because we only support single-threaded environments.
However, a global variable with the thread_local specifier, if requiring dynamic initialization, will cause a reference to the standard ABI function __cxa_thread_atexit that can't be resolved by the linker. |
CODEGEN-3915 |
_Pragma doesn't support raw string arguments |
Fixed |
|
MSP430_18.9.0.STS |
|
|
CODEGEN-3595 |
Stack usage under reports stack amount used because it fails to handle function aliases |
Fixed |
MSP430_18.1.0.LTS |
MSP430_18.9.0.STS, MSP430_18.1.2.LTS |
|
CCS Stack Assistant did not accurately track aliased functions-- functions whose definitions are represented by a different symbol name. Now, the alias function will be used to determine stack size correctly, and the aliased function call name will be replaced with its alias. Currently, the Stack Assistant GUI is not capable of showing both the aliased and alias function names for calls to aliased functions-- this will require a future update. |
SDSCM00014430 |
calloc doesn't check arguments to make sure the requested size is reasonable |
Fixed |
MSP430_18.1.0.LTS |
MSP430_18.9.0.STS |
|
|