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
This commit is contained in:
Tom Tromey 1999-11-05 18:27:28 +00:00 committed by Tom Tromey
parent 467403ca55
commit 09e7d04a1b
2 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,8 @@
1999-11-05 Tom Tromey <tromey@cygnus.com>
* 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 <apbianco@cygnus.com>
* parse.y (method_header:): Issue error message for rule `type

View File

@ -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);