Messages in this thread | | | From | Denis Vlasenko <> | Subject | Re: PATCH - x86-64 signed-compare bug, was Re: select() setting ERESTARTNOHAND (514). | Date | Thu, 11 Jan 2007 20:38:03 +0100 |
| |
On Thursday 11 January 2007 02:02, Neil Brown wrote: > If regs->rax is unsigned long, then I would think the compiler would > be allowed to convert > > switch (regs->rax) { > case -514 : whatever; > } > > to a no-op, as regs->rax will never have a negative value.
In C, you never actually compare different types. They always promoted to some common type first.
both sides of (impicit) == here get promoted to "biggest" integer, in this case, to unsigned long. "-514" is an int, so it gets sign extended to the width of "long" and then converted to unsigned long. -- vda - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |