From 09e7d04a1b2b2365cc8bc61a0ab41115b653a2ce Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 5 Nov 1999 18:27:28 +0000 Subject: [PATCH] re GNATS gcj/85 (Compiler optimizes away private methods when native methods might access them) * class.c (finish_class): Emit inlined methods if any native methods exist in the class. Fixes PR gcj/85. From-SVN: r30420 --- gcc/java/ChangeLog | 5 +++++ gcc/java/class.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index ecf140a8603..b516afd9407 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +1999-11-05 Tom Tromey + + * class.c (finish_class): Emit inlined methods if any native + methods exist in the class. Fixes PR gcj/85. + Mon Nov 1 23:42:00 1999 Alexandre Petit-Bianco * parse.y (method_header:): Issue error message for rule `type diff --git a/gcc/java/class.c b/gcc/java/class.c index 03335285f41..57930fde0bf 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1205,7 +1205,21 @@ finish_class () { tree method; tree type_methods = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (current_class)); - + int saw_native_method = 0; + + /* Find out if we have any native methods. We use this information + later. */ + for (method = type_methods; + method != NULL_TREE; + method = TREE_CHAIN (method)) + { + if (METHOD_NATIVE (method)) + { + saw_native_method = 1; + break; + } + } + /* Emit deferred inline methods. */ for (method = type_methods; method != NULL_TREE; ) { @@ -1214,7 +1228,8 @@ finish_class () /* It's a deferred inline method. Decide if we need to emit it. */ if (flag_keep_inline_functions || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (method)) - || ! METHOD_PRIVATE (method)) + || ! METHOD_PRIVATE (method) + || saw_native_method) { temporary_allocation (); output_inline_function (method); -- 2.30.2