maybe we should add a return; after assert(0); or abort();? or use a gcc no_return attribute (which will add a new function)