Hi,

I believe the right way to fix this is to find all the places in the compiler that catch and rethrow exceptions inside unsafePerformIO, and make them use throwTo when the exception is asynchronous.

Ok, I have looked at this in detail and I'm not sure how feasible this is. I have filed a bug, with a test case, and a detailed explanation of my investigation so far: http://hackage.haskell.org/trac/ghc/ticket/8006

Edsko