/* PR middle-end/19874 */
typedef enum { A,
               B,
               C,
               D } E;

struct S {
    E __attribute__((mode(__byte__))) a;
    E __attribute__((mode(__byte__))) b;
    E __attribute__((mode(__byte__))) c;
    E __attribute__((mode(__byte__))) d;
};

extern void abort(void);
extern void exit(int);

E foo(struct S *s) {
    if (s->a != s->b)
        abort();
    if (s->c != C)
        abort();
    return s->d;
}

int main(void) {
    struct S s[2];
    s[0].a = B;
    s[0].b = B;
    s[0].c = C;
    s[0].d = D;
    s[1].a = D;
    s[1].b = C;
    s[1].c = B;
    s[1].d = A;
    if (foo(s) != D)
        abort();
    exit(0);
}
