Tool/software: TI C/C++ Compiler
Hello.
I have been all days struggling with a problem we have in one of our products.
We are currently using C++ compiler version 18.12.3, but I checked is still present in 18.12.4 and 19.6.0. The problem only arises when we acivate basic optimizations (-O0), and works correctly without optimizations.
To reproduce it I executed this simple code:
struct Data { int r0; int r1; }; void test(float a, float b, Data& data) { float ab = 0.0F; data.r0 = 0; data.r1 = 0; if(a<b) { b = a; ab = a; data.r0 = 1+ab; data.r1 = 1; } } int main() { float a = 3.5F; Data d0; test(a, a, d0); }
When calling "test" with different numbers, it behaves correctly, but when numbers are equal (3.5 i.e.) data will be "half filled".
Calling with 3.5, I will expect d0 to be = {0, 0} as the numbers are equal. I could also expect d0 to be { 4,1 }, but I got d0 == {1, 1}
So it executes just some code inside the "if" of the "test".
The problem is solved by reordering some instructions inside the "if" or adding a NOP in the beggining of it.