summaryrefslogtreecommitdiff
path: root/gcc/java/lang.c
diff options
context:
space:
mode:
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2003-06-10 16:43:39 +0000
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2003-06-10 16:43:39 +0000
commite2e9c55bf5046ef8b472712c739cef7f63f68d89 (patch)
tree7ccc0967b6f9a3aa999e7661ed16ff9f1bebe3cc /gcc/java/lang.c
parent3bda2a473df5e46a74ff8aa04c3f9fc0cfba6975 (diff)
downloadgcc-e2e9c55bf5046ef8b472712c739cef7f63f68d89.tar.gz
2003-05-21 Andrew Haley <aph@redhat.com>
* langhooks-def.h (LANG_HOOKS_DECL_OK_FOR_SIBCALL): New. (LANG_HOOKS_DECLS): Add LANG_HOOKS_DECL_OK_FOR_SIBCALL. (lhd_decl_ok_for_sibcall): New. * langhooks.c (lhd_decl_ok_for_sibcall): New. * langhooks.h (lang_hooks_for_decls.ok_for_sibcall): New field. * calls.c (expand_call): Check lang_hook before generating a sibcall. 2003-05-21 Andrew Haley <aph@redhat.com> * lang.c (LANG_HOOKS_DECL_OK_FOR_SIBCALL): New. (java_decl_ok_for_sibcall): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67713 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java/lang.c')
-rw-r--r--gcc/java/lang.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index f870a574dcf..64283d4c102 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -65,6 +65,7 @@ static int inline_init_test_initialization (void * *, void *);
static bool java_can_use_bit_fields_p (void);
static bool java_dump_tree (void *, tree);
static void dump_compound_expr (dump_info_p, tree);
+static bool java_decl_ok_for_sibcall (tree);
#ifndef TARGET_OBJECT_SUFFIX
# define TARGET_OBJECT_SUFFIX ".o"
@@ -251,6 +252,9 @@ struct language_function GTY(())
#undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN java_dump_tree
+#undef LANG_HOOKS_DECL_OK_FOR_SIBCALL
+#define LANG_HOOKS_DECL_OK_FOR_SIBCALL java_decl_ok_for_sibcall
+
/* Each front end provides its own. */
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -1077,4 +1081,16 @@ java_dump_tree (void *dump_info, tree t)
}
return false;
}
+
+/* Java calls can't, in general, be sibcalls because we need an
+ accurate stack trace in order to guarantee correct operation of
+ methods such as Class.forName(String) and
+ SecurityManager.getClassContext(). */
+
+static bool
+java_decl_ok_for_sibcall (tree decl)
+{
+ return decl != NULL && DECL_CONTEXT (decl) == current_class;
+}
+
#include "gt-java-lang.h"