If an AT EXIT rule refers to $! then the trigger injection code will try to generate code to save the stacked return value in a local var slot and then pass it to the triggered rule. However, when the trigger method is void this is doubly inappropriate and results in an exception because i) there is no stacked return value! and ii) the type supplied when allocating the local var slot is void!!
Injection should be invalidated and a warning exception generated in these circumstances, preferably in the check adapter.
n.b. it is probably necessary to include the same check for AFTER CALL rules which refer to $! when the called method is void.