ftree-vectorize flag is causing a segfault in gcc 4.8.5, but worked in gcc 4.4.7

I have some legacy code that is using a pointer intended to 'walk' along char array buffer. The struct pointer is used to send the data over the wire, but calculates a checksum and stores it in the struct before sending. However there is a segfault happening and it seems to be when ftree-vectorize is used. This seemed to have work when compiled in gcc 4.4.7 with the same flags provided. This is being compiled for 32-bit.

I got the code to run without the ftree-vectorize and I'm not sure how vectoring works at a low level. I also added the ftree-vectorizer-verbose=6 to try to read through the log but I really could not make much sense out of it. I tried to remove the a lot of #defines and get the code concise and clear..

The following flags were also used for compilation: GCC_OPTIMIZATIONS ?= -march=i686 -mmmx -msse -msse2 -O1 -ftree-parallelize-loops=8 -fpredictive-commoning -ftree-vectorize -finline-functions

// a header for information about data
typedef struct Record_Hdr {

    struct {
        unsigned long message_id: 12;
        unsigned long res: 2;
        unsigned long fr_flag: 1;
        unsigned long cr_flag: 1;
        unsigned long message_length: 16;
    } wrd0;
    unsigned long sync_id;

    struct {
        unsigned long sequence_number: 8;
        unsigned long app_flag2: 4;
        unsigned long app_flag1: 4;
        unsigned long destination_id: 8;
        unsigned long source_id: 8;
    } wrd2;
    unsigned long timestamp;
    unsigned long checksum;
} Record_Hdr;

// Header and data
typedef struct {
    Record_Hdr hdr;
    unsigned char  data[1004];

// method defined in another class used below
unsigned char sgf_pkt[1400];
int sgf_pkt_len = 0;
inline char* get_sgf_pkt_msg_ptr() {
     return (char*)&sgf_pkt[sgf_pkt_len];

The problem code:

RECORD *out_msg = NULL;
int msg_length = 85;

out_msg = (RECORD*)mdt_io.get_pkt_msg_ptr();

// set the necessities
out_msg->hdr.wrd0.message_id = 0x25;
out_msg->hdr.wrd0.message_length = msg_length;
out_msg->hdr.wrd2.source_id = 104;
out_msg->hdr.wrd2.destination_id = 0;
out_msg->hdr.sync_id = 0x5555AAAA;
out_msg->hdr.timestamp = timeInTicks;
out_msg->hdr.checksum = 0;

// checksum calculation
unsigned long  chkSum, *datap;
int i;
chkSum = 0;
datap = (unsigned long *) &(out_msg->hdr.wrd0);
// runs 85 times...
for (i=0; i < msg_length; i++) {
    chkSum ^= *datap++;     // SEG FAULTS HERE, usually at 84th index
out_msg->hdr.checksum = chkSum;

Tried using the gdb debugger to see if the sgf_pkt array is out of bounds but it is not. Overall I'm trying to understand if there is any memory alignment issues going on that I should be aware of.

Thank you