On Mon, 7 Mar 2016 11:41:37 -0500 (EST)
Alan Stern <st...@rowland.harvard.edu> wrote:

> It's hard to call this a compiler bug, but perhaps it is -- I don't
> know how programmers are supposed to tell CLANG that a subroutine
> modifies the Interrupt Flag in a way that the compiler shouldn't mess
> up.


Really! This is what's is happening??

Clang takes this:

        if (!--hid->open) {
                spin_unlock_irq(X);
                do_something();
        } else {
                spin_unlock_irq(X);
        }

Thus it's basically doing:

        FLAG = !--hid->open;
        push flags;
        spin_unlock_irq(X)
        pop flags;
        if (FLAG zero set) {
                do_something();
        }


OUCH!!! There's gotta be a way to turn that off, otherwise Clang can
not be used to compile the kernel.

Nice detective work.

-- Steve

Reply via email to