From 41ee087715d10e4a2a8504dff55afdc61f36810b Mon Sep 17 00:00:00 2001 From: Alexandre Petit-Bianco Date: Mon, 7 May 2001 12:53:15 -0700 Subject: [PATCH] re PR java/2598 (Runtime crash regression accessing field from enclosing class from inner class) 2001-05-07 Alexandre Petit-Bianco * parse.y (fix_constructors): Removed unecessary assignment to local. Moved assignment to `this$', fixed comments and indentation. (build_wfl_wrap): Fixed indentation. Fixes PR java/2598, java/2579 and java/2658. (http://gcc.gnu.org/ml/gcc-patches/2001-05/msg00412.html ) From-SVN: r41905 --- gcc/java/ChangeLog | 8 ++++++++ gcc/java/parse.y | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 1831e2d8301..fc09afd7872 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2001-05-07 Alexandre Petit-Bianco + + * parse.y (fix_constructors): Removed unecessary assignment to + local. Moved assignment to `this$', fixed comments and + indentation. + (build_wfl_wrap): Fixed indentation. + Fixes PR java/2598, java/2579 and java/2658. + 2001-05-03 Mo DeJong * lex.c (java_new_lexer): Call iconv_close on temp handle used to diff --git a/gcc/java/parse.y b/gcc/java/parse.y index d7b86339b83..aaff8b4fd71 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -8500,7 +8500,7 @@ fix_constructors (mdecl) /* We don't generate a super constructor invocation if we're compiling java.lang.Object. build_super_invocation takes care of that. */ - compound = java_method_add_stmt (mdecl, build_super_invocation (mdecl)); + java_method_add_stmt (mdecl, build_super_invocation (mdecl)); /* Insert the instance initializer block right here, after the super invocation. */ @@ -8536,13 +8536,17 @@ fix_constructors (mdecl) found = 0; body = NULL_TREE; } + + /* Generate the assignment to this$, if necessary */ + if ((thisn_assign = build_thisn_assign ())) + compound = add_stmt_to_compound (compound, NULL_TREE, thisn_assign); + /* The constructor is missing an invocation of super() */ if (!found) compound = add_stmt_to_compound (compound, NULL_TREE, build_super_invocation (mdecl)); - - /* Explicit super() invokation should be kept as the first - statement, we move it. */ + /* Explicit super() invokation should take place before the + instance initializer blocks. */ else { compound = add_stmt_to_compound (compound, NULL_TREE, @@ -8550,10 +8554,6 @@ fix_constructors (mdecl) TREE_OPERAND (found_call, 0) = empty_stmt_node; } - /* Generate the assignment to this$, if necessary */ - if ((thisn_assign = build_thisn_assign ())) - compound = add_stmt_to_compound (compound, NULL_TREE, thisn_assign); - /* Insert the instance initializer block right after. */ if ((ii = build_instance_initializer (mdecl))) compound = add_stmt_to_compound (compound, NULL_TREE, ii); @@ -10110,7 +10110,7 @@ patch_method_invocation (patch, primary, where, from_super, /* Prepare to pass hidden parameters to finit$, if any. */ finit_parms = build_alias_initializer_parameter_list (AIPL_FUNCTION_FINIT_INVOCATION, current_class, NULL_TREE, NULL); - + finit_call = build_method_invocation (build_wfl_node (finit_identifier_node), finit_parms); @@ -11973,6 +11973,7 @@ maybe_absorb_scoping_blocks () are completing them. */ /* Wrap a non WFL node around a WFL. */ + static tree build_wfl_wrap (node, location) tree node; @@ -11993,7 +11994,6 @@ build_wfl_wrap (node, location) return wfl; } - /* Build a super() constructor invocation. Returns empty_stmt_node if we're currently dealing with the class java.lang.Object. */