aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenObjCXX/arc-marker-funclet.mm
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2018-03-19 19:34:39 +0000
committerShoaib Meenai <smeenai@fb.com>2018-03-19 19:34:39 +0000
commit75ec747077d46ed5c15d28b06981d5291159d7b2 (patch)
tree1f803c8a7eb39d4abb07c0fe898e3b0b9d660a87 /test/CodeGenObjCXX/arc-marker-funclet.mm
parent0d77b40bff5effdfbb53dc6ab440982b17b5e51a (diff)
[CodeGen] Add funclet token to ARC marker
The inline assembly generated for the ARC autorelease elision marker must have a funclet token if it's emitted inside a funclet, otherwise the inline assembly (and all subsequent code in the funclet) will be marked unreachable. r324689 fixed this issue for regular inline assembly blocks. Note that clang only emits the marker at -O0, so this only fixes that case. The optimizations case (where the marker is emitted by the backend) will be fixed in a separate change. Differential Revision: https://reviews.llvm.org/D44640 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327892 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenObjCXX/arc-marker-funclet.mm')
-rw-r--r--test/CodeGenObjCXX/arc-marker-funclet.mm17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/CodeGenObjCXX/arc-marker-funclet.mm b/test/CodeGenObjCXX/arc-marker-funclet.mm
new file mode 100644
index 0000000000..900c2788da
--- /dev/null
+++ b/test/CodeGenObjCXX/arc-marker-funclet.mm
@@ -0,0 +1,17 @@
+// 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@@YAPAUobjc_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{{.*}}", ""(){{$}}