summaryrefslogtreecommitdiff
path: root/gcc/objcp/objcp-lang.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-22 13:49:03 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-22 13:49:03 +0000
commit4e8b9ae1bb4321f00513a58a470f16afba8cd136 (patch)
tree32bde1c1dec5f70b5c044e6e187217b6d28d7305 /gcc/objcp/objcp-lang.c
parentc16b6d194cfad4ac73602162b9d3dc9244fa605a (diff)
downloadgcc-4e8b9ae1bb4321f00513a58a470f16afba8cd136.tar.gz
2009-09-22 Richard Guenther <rguenther@suse.de>
PR objc++/41430 * Make-lang.in (objcp-lang.o): Add $(EXCEPT_H) dependency. * objcp-lang.c (LANG_HOOKS_EH_PERSONALITY): Define. (LANG_HOOKS_EH_RUNTIME_TYPE): Likewise. (objcxx_eh_personality): New function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151979 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/objcp/objcp-lang.c')
-rw-r--r--gcc/objcp/objcp-lang.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/objcp/objcp-lang.c b/gcc/objcp/objcp-lang.c
index 1b54ba81754..47bff9ab2ff 100644
--- a/gcc/objcp/objcp-lang.c
+++ b/gcc/objcp/objcp-lang.c
@@ -33,9 +33,11 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic.h"
#include "debug.h"
#include "cp-objcp-common.h"
+#include "except.h"
enum c_language_kind c_language = clk_objcxx;
static void objcxx_init_ts (void);
+static tree objcxx_eh_personality (void);
/* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h;
consequently, there should be very few hooks below. */
@@ -50,6 +52,10 @@ static void objcxx_init_ts (void);
#define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr
#undef LANG_HOOKS_INIT_TS
#define LANG_HOOKS_INIT_TS objcxx_init_ts
+#undef LANG_HOOKS_EH_PERSONALITY
+#define LANG_HOOKS_EH_PERSONALITY objcxx_eh_personality
+#undef LANG_HOOKS_EH_RUNTIME_TYPE
+#define LANG_HOOKS_EH_RUNTIME_TYPE build_eh_type_type
/* Each front end provides its own lang hook initializer. */
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -138,6 +144,20 @@ objcxx_init_ts (void)
init_shadowed_var_for_decl ();
}
+static GTY(()) tree objcp_eh_personality_decl;
+
+static tree
+objcxx_eh_personality (void)
+{
+ if (!objcp_eh_personality_decl)
+ objcp_eh_personality_decl
+ = build_personality_function (USING_SJLJ_EXCEPTIONS
+ ? "__gxx_personality_sj0"
+ : "__gxx_personality_v0");
+
+ return objcp_eh_personality_decl;
+}
+
void
finish_file (void)