[cfe-commits] r118366 - in /cfe/trunk: lib/CodeGen/CGException.cpp lib/CodeGen/CGException.h test/CodeGen/exceptions.c

John McCall rjmccall at apple.com
Sat Nov 6 19:35:25 PDT 2010


Author: rjmccall
Date: Sat Nov  6 21:35:25 2010
New Revision: 118366

URL: http://llvm.org/viewvc/llvm-project?rev=118366&view=rev
Log:
ARM EH uses a different personality function in C.


Added:
    cfe/trunk/test/CodeGen/exceptions.c
Modified:
    cfe/trunk/lib/CodeGen/CGException.cpp
    cfe/trunk/lib/CodeGen/CGException.h

Modified: cfe/trunk/lib/CodeGen/CGException.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=118366&r1=118365&r2=118366&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGException.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGException.cpp Sat Nov  6 21:35:25 2010
@@ -300,6 +300,7 @@
 }
 
 const EHPersonality EHPersonality::GNU_C("__gcc_personality_v0");
+const EHPersonality EHPersonality::GNU_C_SJLJ("__gcc_personality_sj0");
 const EHPersonality EHPersonality::NeXT_ObjC("__objc_personality_v0");
 const EHPersonality EHPersonality::GNU_CPlusPlus("__gxx_personality_v0");
 const EHPersonality EHPersonality::GNU_CPlusPlus_SJLJ("__gxx_personality_sj0");
@@ -307,6 +308,8 @@
                                             "objc_exception_throw");
 
 static const EHPersonality &getCPersonality(const LangOptions &L) {
+  if (L.SjLjExceptions)
+    return EHPersonality::GNU_C_SJLJ;
   return EHPersonality::GNU_C;
 }
 

Modified: cfe/trunk/lib/CodeGen/CGException.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.h?rev=118366&r1=118365&r2=118366&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGException.h (original)
+++ cfe/trunk/lib/CodeGen/CGException.h Sat Nov  6 21:35:25 2010
@@ -44,6 +44,7 @@
 public:
   static const EHPersonality &get(const LangOptions &Lang);
   static const EHPersonality GNU_C;
+  static const EHPersonality GNU_C_SJLJ;
   static const EHPersonality GNU_ObjC;
   static const EHPersonality NeXT_ObjC;
   static const EHPersonality GNU_CPlusPlus;

Added: cfe/trunk/test/CodeGen/exceptions.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/exceptions.c?rev=118366&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/exceptions.c (added)
+++ cfe/trunk/test/CodeGen/exceptions.c Sat Nov  6 21:35:25 2010
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fexceptions -fblocks | FileCheck %s
+// RUN: %clang_cc1 -triple armv7-apple-unknown -emit-llvm -o - %s -fexceptions -fsjlj-exceptions -fblocks | FileCheck %s -check-prefix=CHECK-ARM
+
+// rdar://problem/8621849
+void test1() {
+  extern void test1_helper(void (^)(int));
+
+  // CHECK:     define void @test1()
+  // CHECK-ARM: define arm_aapcscc void @test1()
+
+  __block int x = 10;
+
+  // CHECK:     invoke void @test1_helper(
+  // CHECK-ARM: invoke arm_aapcscc void @test1_helper(
+  test1_helper(^(int v) { x = v; });
+
+  // CHECK:     call {{.*}} @llvm.eh.selector({{.*}}, i8* bitcast (i32 (...)* @__gcc_personality_v0 to i8*)
+  // CHECK-ARM: call {{.*}} @llvm.eh.selector({{.*}}, i8* bitcast (i32 (...)* @__gcc_personality_sj0 to i8*)
+}





More information about the cfe-commits mailing list