This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: On NULL and 0


 >  Zero is completely acceptable for a null pointer constant in all circumstances *except* when passing to a varargs function, which can go badly wrong on platforms where the sizeof a pointer is larger than the sizeof an int.

This is a serious loophole on such platforms, since the compiler cannot diagnose the error. (The "sentinel" attribute covers only one special case.)  Our approach has been to ask compiler vendors to widen such integer arguments to intptr_t (or uintptr_t), which is happily doable since the vendors are already passing `int' arguments in intptr-wide registers or stack slots.  A couple vendors only gave us a secret option for this, we are now asking them to enable the option by default :-)

This is also a problem when passing to a function whose prototype is not in scope.  (Compilers can issue a diagnostic for that, but they should also widen in such cases as well.)

Tom Truscott


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]