No, that's not nasal demons. After "a=a++;", a will either have the same value as before, or will be incremented by 1. There are no other options. The program will not crash. Your computer will not catch on fire. Demons will not fly out of your nose (or your arse). The result is boundedly undefined.
The thing is that the compiler, has been designed to a certain defined specification (The C or applicable, standard). So, since the operation is UNDEFINED, the compiler has NOT (necessarily) been designed to include the capabilities to correctly compile such code.
So you can't (with 100% reliability), say "it will always be the same or same plus 1 value, never anything else".
Since you have gone outside of the allowable limits of the compiler (exceeded Absolute Maximum values, if you want a datasheet analogy).
Therefore, absolutely anything can happen.
Just like exceeding the maximum capabilities of a transistor.
The overloaded transistor, may carry on working, it may let out the magic smoke, it may catch on fire and explode.
It may eject a high copper content vapour, which when your mother breathes it in, changes her colour to GREEN, and when you breath in the magic smoke you may cough out terrible demons.