The compiler performs the following check on access control on exceptions:
The formal argument of a catch clause obeys the same rules as an argument of the function in which the catch clause occurs.
An object can be thrown if it can be copied and destroyed in the context of the function in which the throw occurs.
Currently, access controls do not affect matching.
No other access is checked at runtime except for the matching rule described in "Matching Exceptions With Handlers".