I wonder if setjmp / longjmp could work here (e.g. Swift calling into C that calls those). Not the nicest API by any stretch of imagination but could do the trick.
BTW, we have throwing getters but not setters, why is so? Is this something just not currently implemented and planned for the future or are there inherent reasons against throwing setters?