Compiling the example below with '--stack-auto' will fail in the function 'func_0_ng'.
error 9: FATAL Compiler Internal Error in file '../../../sdcc_svn/sdcc/src/mcs51/gen.c' line number '478' : getFreePtr should never reach here
'func'0_ok' is a workaround that I'm using for now.
My SDCC version is 4.1.6 #12575 (with some local seemingly unrelated modifications).
#include <stdint.h>
extern uint8_t func_2 (void);
extern void func_1 (void) __banked;
__xdata uint32_t g_x = 0;
#if 1
void func_0_ng (uint64_t x) __banked
{
if (func_2 ())
{
if (g_x == 0)
g_x = (uint32_t)x | 1;
if ((uint32_t)x - g_x > 10)
func_1 ();
}
}
#endif
#if 1
void func_0_ok (uint64_t x_) __banked
{
uint32_t x = x_;
if (func_2 ())
{
if (g_x == 0)
g_x = (uint32_t)x | 1;
if ((uint32_t)x - g_x > 10)
func_1 ();
}
}
#endif
A slightly reduced case:
Issue still present as of SVN r14412.
@spth I guess this will evaporate with the new register alloactor?