/* This used to generate unaligned accesses at -O2 because of IVOPTS.  */

struct packed_struct {
    struct packed_struct1 {
        unsigned char cc11;
        unsigned char cc12;
    } __attribute__((packed)) pst1;
    struct packed_struct2 {
        unsigned char cc21;
        unsigned char cc22;
        unsigned short ss[104];
        unsigned char cc23[13];
    } __attribute__((packed)) pst2[4];
} __attribute__((packed));

typedef struct
{
    int ii;
    struct packed_struct buf;
} info_t;

static unsigned short g;

static void __attribute__((noinline))
dummy(unsigned short s) {
    g = s;
}

static int
foo(info_t *info) {
    int i, j;

    for (i = 0; i < info->buf.pst1.cc11; i++)
        for (j = 0; j < info->buf.pst2[i].cc22; j++)
            dummy(info->buf.pst2[i].ss[j]);

    return 0;
}

int main(void) {
    info_t info;
    info.buf.pst1.cc11 = 2;
    info.buf.pst2[0].cc22 = info.buf.pst2[1].cc22 = 8;
    return foo(&info);
}
