
Summary: Introduces funclet-based unwinding for Objective-C and fixes an issue where global blocks can't have their isa pointers initialised on Windows. After discussion with Dustin, this changes the name mangling of Objective-C types to prevent a C++ catch statement of type struct X* from catching an Objective-C object of type X*. Reviewers: rjmccall, DHowett-MSFT Reviewed By: rjmccall, DHowett-MSFT Subscribers: mgrang, mstorsjo, smeenai, cfe-commits Differential Revision: https://reviews.llvm.org/D50144 llvm-svn: 339428
18 lines
553 B
Plaintext
18 lines
553 B
Plaintext
// RUN: %clang_cc1 -triple i686-unknown-windows-msvc -fobjc-runtime=ios-6.0 -fobjc-arc \
|
|
// RUN: -fexceptions -fcxx-exceptions -emit-llvm -o - %s | FileCheck %s
|
|
|
|
id f();
|
|
void g() {
|
|
try {
|
|
f();
|
|
} catch (...) {
|
|
f();
|
|
}
|
|
}
|
|
|
|
// CHECK: call i8* @"?f@@YAPAU.objc_object@@XZ"() [ "funclet"(token %1) ]
|
|
// CHECK-NEXT: call void asm sideeffect "movl{{.*}}%ebp, %ebp{{.*}}", ""() [ "funclet"(token %1) ]
|
|
|
|
// The corresponding f() call was invoked from the entry basic block.
|
|
// CHECK: call void asm sideeffect "movl{{.*}}%ebp, %ebp{{.*}}", ""(){{$}}
|