News for hackers. Stuff that matters.
Re:Xcode 4 ships a buggy compiler by jtc331 on Friday December 30, 2011 @10:43PM (#3410068)
"On the contrary, you can do something safely with such a pointer - compare it with another pointer. If the value of 'alloca(0)' is _unspecified_, then this comparison is legal, and its result, while not specified, must be consistent."

While you would expect a comparison to another pointer to be legal, I don't believe it has to be consistent. That's the whole point of undefined behavior. In one sense, it's like the question of whether NaN == NaN. In many implementations, that expression is not necessarily true--even though based on your pointer example logic it should be.

Referencing the OP: the real problem here is not that the NULL check got optimized out and so seemed inconsistent. That's within the tolerance of C's undefined behavior (which is designed for optimizations like this and is what makes it so hard to write truly sane C code.) The real problem is a bug with the code as written. One should never check against and undefined result. Instead there should have been an initial boolean guard against the case of alloca'ing 0 bytes. I __could__ see an argument for expecting that to be always null (in fact, that's the argument for higher level languages!) But expecting it to be a specific value in relation to the stack? That seems arbitrary at best.

Re:Xcode 4 ships a buggy compiler by bdonlan on Saturday December 31, 2011 @09:50AM (#3410956)
> While you would expect a comparison to another pointer to be legal, I don't believe it has to be consistent. That's the whole point of undefined behavior. In one sense, it's like the question of whether NaN == NaN. In many implementations, that expression is not necessarily true--even though based on your pointer example logic it should be.

Right, this is a question of whether alloca(0) is undefined behavior, an unspecified return value, or implementation-defined behavior. And I argue that alloca's behavior is implementation-defined in the first place, so it LLVM-gcc wants alloca(0) to be UB it needs to define that :)

Re:Xcode 4 ships a buggy compiler by Someone on Saturday December 31, 2011 @04:40AM (#3410563)
"the case of alloca'ing 0 bytes. I __could__ see an argument for expecting that to be always null"

??? I would expect that it always succeeds. Rationale: if, at some time and place, alloca(n) succeeds, I expect that any alloca asking for less space would succeed, too.

Re:Xcode 4 ships a buggy compiler by dextorious on Saturday December 31, 2011 @05:10AM (#3410613)
so alloca(-1) would succeed too, right?
Re:Xcode 4 ships a buggy compiler by FooBarWidget on Saturday December 31, 2011 @05:18AM (#3410623)
No. According to the OS X and Linux man pages 'size' has type 'size_t'. It is undefined whether size_t is signed.
Re:Xcode 4 ships a buggy compiler by Someone on Saturday December 31, 2011 @08:16AM (#3410818)
alloca takes a sixe_t. I think size_t is unsigned. http://stackoverflow.com/questions/1089176/is-size-t-always-... seems to agree with that (correction welcome)