On Mon, Mar 13, 2006 at 12:12:31AM -0400, Horst von Brand wrote: > Very improbable, they'll be the same normally ("void *" is a way of getting > rid of the overloading of the meaning of "char *" for this before ANSI C). > Sure, sizeof(int *) might be 4, but I think that is pretty far off. Let me clarify my position. The STANDARD doesn't guarantee such things. In PRACTICE, for modern machines you can assume that all pointers are the same size (and things like all-bits-zero is a null pointer) if it makes your code cleaner. In other words, I agree with Linus: git should follow what works in practice, but you should at least recognize that you're violating the standard. That being said, you appear to be making the argument that passing a 'foo *' to a variadic function expecting a 'bar *' doesn't violate the standard. I believe it invokes undefined behavior. > There are special rules for variadic functions, probably pointers would be > cast to/from void * in such a case by the compiler. The rules indicate that arguments matching the '...' follow "default argument promotion". See section 6.5.2.2, paragraph 7. This default promotion is the same as what would happen if there were no prototype for the function, and is defined in paragraph 6: ...the integer promotions are performed on each argument, and arguments that have type float are promoted to double. I don't see anything about promoting pointers to void. Furthermore, when accessing the arguments using va_arg, the types must match or the behavior is undefined, UNLESS (7.5.1.1, para 2): - one type is signed and the other is the matching unsigned type - one type is a pointer to void and the other is a pointer of character type IOW, the standard does promise that void* and char* pointers are represented the same, but nothing else. > > If you remain unconvinced, I can try to find chapter and verse of the > > standard. > Please do. See above. -Peff - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html