diff options
author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-10 16:43:39 +0000 |
---|---|---|
committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-10 16:43:39 +0000 |
commit | e2e9c55bf5046ef8b472712c739cef7f63f68d89 (patch) | |
tree | 7ccc0967b6f9a3aa999e7661ed16ff9f1bebe3cc /gcc/java/lang.c | |
parent | 3bda2a473df5e46a74ff8aa04c3f9fc0cfba6975 (diff) | |
download | gcc-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.c | 16 |
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" |