N.B., for LLVM to recognize the void pointer type and by extension
functions like malloc(), we need to have it represented as i8* in
LLVM bitcode. The enum used here ensures this and prevents misuse
of the "raw" type by only having private variants. We need two
variants, because the compiler complains about the repr attribute
otherwise and we need at least one variant as otherwise the enum
would be uninhabited and at least dereferencing such pointers would
be UB.
хм, а в винапи крейте не подхватили(