This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR41430
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 22 Sep 2009 15:48:08 +0200 (CEST)
- Subject: [PATCH] Fix PR41430
I forgot about obj-c++ with the EH personality rewrite. Fixed as
follows, tested on x86_64-unknown-linux-gnu, applied.
Richard.
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.
Index: gcc/objcp/Make-lang.in
===================================================================
*** gcc/objcp/Make-lang.in (revision 151977)
--- gcc/objcp/Make-lang.in (working copy)
*************** cc1objplus$(exeext): $(OBJCXX_OBJS) cc1o
*** 72,78 ****
objcp/objcp-lang.o : objcp/objcp-lang.c \
$(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h objc/objc-act.h \
$(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objcp.h \
! $(DIAGNOSTIC_H) cp/cp-objcp-common.h $(GIMPLE_H)
objcp/objcp-decl.o : objcp/objcp-decl.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
--- 72,78 ----
objcp/objcp-lang.o : objcp/objcp-lang.c \
$(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h objc/objc-act.h \
$(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objcp.h \
! $(DIAGNOSTIC_H) cp/cp-objcp-common.h $(GIMPLE_H) $(EXCEPT_H)
objcp/objcp-decl.o : objcp/objcp-decl.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
Index: gcc/objcp/objcp-lang.c
===================================================================
*** gcc/objcp/objcp-lang.c (revision 151977)
--- gcc/objcp/objcp-lang.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 33,41 ****
--- 33,43 ----
#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. */
*************** static void objcxx_init_ts (void);
*** 50,55 ****
--- 52,61 ----
#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;
*************** objcxx_init_ts (void)
*** 138,143 ****
--- 144,163 ----
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)