Bonjour,
Je rencontre quelques problèmes de compilation qui semblent liés à la version du compilateur gcc actuellement utilisée par le framework Arduino (pour mes librairies portables qui compilent déjà très bien sous Windows, Linux & MacOS) :
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.
J'ai pu lire que le problème est résolu dans les version 4.8.2 et supérieures de gcc... Est-ce-que quelqu'un saurait si l'on peut "mettre à jour soi même" le gcc du framework (qui malheureusement semble être le 4.8.1 !) ? et si oui, comment ?
Merci pour l'info !
Malheureusement je tourne essentiellement sous XCode (Mac) pour l'IDE, mais occasionnellement sous Windows aussi.
Si je trouve l'occasion, je tenterai la manip sous Linux, pour l'heure je tente de contourner le problème en attendant...
Après une recherche par dichotomie de contournement, j'ai trouvé que c'était ce switch qui faisait planter le compilo :
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;
}
En le mettant en cascade avec pas plus de 6 cases dans chacun, ca compile (!) :
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;
}
}
}
Si je mets plus de 6 cas dans un switch, je retombe sur le plantage du compilateur (!)
C'est une solution de contournement qui me permet d'avancer, mais ce n'est pas très élégant...
oui oui, l'opérateur "-=" est surchargé pour faire une concaténation en tête (préfixe). Il fonctionne très bien, comme dit, sur Mac/iOS, Linux & Windows...