diff --git a/Test/CMakeLists.txt b/Test/CMakeLists.txt index 8e253ae..1e87e6c 100644 --- a/Test/CMakeLists.txt +++ b/Test/CMakeLists.txt @@ -26,6 +26,7 @@ set(TESTS WeakReferences_arc.m objc_msgSend.m msgInterpose.m + NilException.m ) # Function for adding a test. This takes the name of the test and the list of diff --git a/Test/NilException.m b/Test/NilException.m new file mode 100644 index 0000000..cd4fa58 --- /dev/null +++ b/Test/NilException.m @@ -0,0 +1,17 @@ +#include "Test.h" + +int main(void) +{ + BOOL caught_exception = NO; + @try + { + @throw(nil); + } + @catch (id x) + { + assert(nil == x); + caught_exception = YES; + } + assert(caught_exception == YES); + return 0; +} diff --git a/eh_personality.c b/eh_personality.c index 5308862..e5abf5a 100644 --- a/eh_personality.c +++ b/eh_personality.c @@ -358,7 +358,10 @@ static inline _Unwind_Reason_Code internal_objc_personality(int version, else if (!foreignException) { ex = objc_exception_from_header(exceptionObject); - thrown_class = classForObject(ex->object); + if (ex->object != nil) + { + thrown_class = classForObject(ex->object); + } } else if (_objc_class_for_boxing_foreign_exception) {