/* { dg-options "-mtune=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */

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

long baz1(void *a) {
    static long l;
    return l++;
}

int baz2(const char *a) {
    return 0;
}

int baz3(int i) {
    if (!i)
        abort();
    return 1;
}

void **bar;

int foo(void *a, long b, int c) {
    int d = 0, e, f = 0, i;
    char g[256];
    void **h;

    g[0] = '\n';
    g[1] = 0;

    while (baz1(a) < b) {
        if (g[0] != ' ' && g[0] != '\t') {
            f = 1;
            e = 0;
            if (!d && baz2(g) == 0) {
                if ((c & 0x10) == 0)
                    continue;
                e = d = 1;
            }
            if (!((c & 0x10) && (c & 0x4000) && e) && (c & 2))
                continue;
            if ((c & 0x2000) && baz2(g) == 0)
                continue;
            if ((c & 0x1408) && baz2(g) == 0)
                continue;
            if ((c & 0x200) && baz2(g) == 0)
                continue;
            if (c & 0x80) {
                for (h = bar, i = 0; h; h = (void **)*h, i++)
                    if (baz3(i))
                        break;
            }
            f = 0;
        }
    }
    return 0;
}

int main() {
    void *n = 0;
    bar = &n;
    foo(&n, 1, 0xc811);
    exit(0);
}
