Your compiler, or rather your architecture definition supplied to the compiler, is broken.  NULL should be an <i>invalid</i> pointer value — it need <i>not</i> actually be memory address 0.  (The explicit constant 0 <i>in a pointer context</i> should be automatically translated by the compiler into this special invalid pointer value.)  There have been several such architectures already, so this should not present an insurmountable problem.