gcc 4.8.2 or latest ?

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...