Hi, it seems that I've been encountering some gcc troubles while compiling my source code portable libraries (already working on MacOS, Windows & Linux) :
TOOLS/gt_cls_string.cpp: In member function 'gt_cls_string& gt_cls_string::str(gt_longlong, gt_cls_string::enm_base)':
TOOLS/gt_cls_string.cpp:418:1: error: unrecognizable insn:
}
^
(insn 228 227 229 9 (parallel [
(set (reg:HI 66)
(minus:HI (subreg:HI (subreg:SI (reg:DI 63) 0) 0)
(reg:HI 64)))
(clobber (scratch:QI))
]) TOOLS/gt_cls_string.cpp:382 -1
(nil))
TOOLS/gt_cls_string.cpp:418:1: internal compiler error: in extract_insn, at recog.c:2150
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
I've readed about it and it seems to be a gcc problem, solved in version 4.8.2 and above. Is there a "simple" way for me to update the gcc used into the arduino framework (that is still 4.8.1) to a more recent version ?
Thank you in advance for your help,
Z
Edit :
I've tried to build it by using -O0, - O1 and - O2 compiler optimization options, but the result is still the same...
After some research&try "dummy-bypass-dichotomy", I've found that the following code seems to be responsible making appear the gcc compiler bug :
switch( loc_ll_tmp )
{
case 0 : *this -= '0'; break;
case 1 : *this -= '1'; break;
case 2 : *this -= '2'; break;
case 3 : *this -= '3'; break;
case 4 : *this -= '4'; break;
case 5 : *this -= '5'; break;
case 6 : *this -= '6'; break;
case 7 : *this -= '7'; break;
case 8 : *this -= '8'; break;
case 9 : *this -= '9'; break;
case 10 : *this -= 'A'; break;
case 11 : *this -= 'B'; break;
case 12 : *this -= 'C'; break;
case 13 : *this -= 'D'; break;
case 14 : *this -= 'E'; break;
case 15 : *this -= 'F'; break;
}
If I change it to a cascading switch, with no more than 6 cases per switch, it compiles quite well (!) :
switch( loc_ll_tmp )
{
case 0 : *this -= '0'; break;
case 1 : *this -= '1'; break;
case 2 : *this -= '2'; break;
case 3 : *this -= '3'; break;
case 4 : *this -= '4'; break;
case 5 : *this -= '5'; break;
default :
switch ( loc_ll_tmp )
{
case 6 : *this -= '6'; break;
case 7 : *this -= '7'; break;
case 8 : *this -= '8'; break;
case 9 : *this -= '9'; break;
case 10 : *this -= 'A'; break;
case 11 : *this -= 'B'; break;
default :
switch (loc_ll_tmp)
{
case 12 : *this -= 'C'; break;
case 13 : *this -= 'D'; break;
case 14 : *this -= 'E'; break;
case 15 : *this -= 'F'; break;
}
}
}
If I put any switch with more than 6 cases, the compiler bugs again...
So it is a bypass solution that allows me to keep going on, but it does not look like "normal" to me...
I have this problem - any resolution?
-Tom
The only one I've found for the moment is the one exposed : cascading switch/cases...