I warn anybody before using ARM Keil 4.13a. It generates defective code. I have spent several hours with debugging a code that has been already worked. The problem affects local variables of functions and passing arguments. Code has been wrongly compiled without any optimization. I have no courage and time to test optimizations.
I also encourage Keil not to publish Keil 4.13a any more.
Keil 4.12 seems to be OK.
Yes, I have reported this issue to Keil yesterday and no reply obtained yet.
I do not wish to bog down into details. In several cases compiler mis-compiled pointer to variable to a different location. In some cases C++ code called wrong ctor and so on... All these issues are not observable in 4.12.
Some construct like this passed completely different pointer. But this simple case would probably work fine. The real function had 4 parameters and some of them were passed correctly.
void proc1(void *p) { }
void proc2(void) { char c;
proc1(&c); }
I cannot attach image to this forum to demonstrate screenshot of Keil. I reverted back to 4.12 and any analysis would take me lot of time.
Unfortunately, without any specific details, your accusation is just about worthless!
"mis-compiled pointer to variable to a different location"
What do you mean by that: was the pointer itself placed in a "wrong location", or did the pointer's value point to a "wrong location"?
"passed completely different pointer"
What do you mean by that?
"any analysis would take me lot of time"
Yes, of course - but without that proper analysis, it's just speculation...
#"passed completely different pointer" #What do you mean by that?
When I debugged a code and I let Keil to show &c inside watching and I saw some address. When I have seen contents of "p" it was different address.
The "c" was not changed after returning, so it means that some different memory area has been rewritten.
I am using Keil from 4.10 and I have not observed this issue until 4.13.