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

Reply via email to