This function compiles OK with -O2 and does not with -O3. (I'm typically using -O2 but tried -O3 out of curiosity.)
//====== Begin test.c============================ #include <io.h> #include <signal.h> typedef signed int SI_16; typedef unsigned int UI_16; typedef unsigned long UI_32; extern UI_16 time_high; // High word of timer critical UI_32 get_time (void) { register UI_16 time_L; register UI_16 time_H; time_L = TBR; time_H = time_high; if (((SI_16) time_L) >= 0 && (TBCTL & TBIFG) != 0) { time_H++; } return (((UI_32) time_H) << 16) | time_L; } //====== End test.c ============================= Command line and results: C:\Work> msp430-gcc -mmcu=msp430x149 -O3 -c test.c test.c: In function `get_time': test.c:23: Internal compiler error in verify_local_live_at_start, at flow.c:586 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. Running on Windows 98SE with the mspgcc-20030506 release. - Dan Miner