diff -Nrcpad gcc-4.0.2/boehm-gc/.cvsignore gcc-4.0.3/boehm-gc/.cvsignore *** gcc-4.0.2/boehm-gc/.cvsignore Tue Jun 15 07:42:06 2004 --- gcc-4.0.3/boehm-gc/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/boehm-gc/ChangeLog gcc-4.0.3/boehm-gc/ChangeLog *** gcc-4.0.2/boehm-gc/ChangeLog Wed Sep 21 03:54:54 2005 --- gcc-4.0.3/boehm-gc/ChangeLog Thu Mar 9 20:45:09 2006 *************** *** 1,3 **** --- 1,17 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + + 2005-12-06 Matthias Klose + + 2005-09-15 Kazu Hirata + * include/private/gc_locks.h (GC_test_and_set): Change the + constraint of the first operand to '0'. + + 2005-11-01 Bryce McKinlay + + * include/private/gc_priv.h: Increase MAX_ROOT_SETS to 1024. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/boehm-gc/include/private/gc_locks.h gcc-4.0.3/boehm-gc/include/private/gc_locks.h *** gcc-4.0.2/boehm-gc/include/private/gc_locks.h Mon Jul 28 04:18:23 2003 --- gcc-4.0.3/boehm-gc/include/private/gc_locks.h Tue Dec 6 09:29:49 2005 *************** *** 209,215 **** /* See linuxthreads/sysdeps/arm/pt-machine.h in glibc-2.1 */ __asm__ __volatile__("swp %0, %1, [%2]" : "=r"(oldval) ! : "r"(1), "r"(addr) : "memory"); return oldval; } --- 209,215 ---- /* See linuxthreads/sysdeps/arm/pt-machine.h in glibc-2.1 */ __asm__ __volatile__("swp %0, %1, [%2]" : "=r"(oldval) ! : "0"(1), "r"(addr) : "memory"); return oldval; } diff -Nrcpad gcc-4.0.2/boehm-gc/include/private/gc_priv.h gcc-4.0.3/boehm-gc/include/private/gc_priv.h *** gcc-4.0.2/boehm-gc/include/private/gc_priv.h Wed Feb 16 04:10:42 2005 --- gcc-4.0.3/boehm-gc/include/private/gc_priv.h Wed Nov 2 00:07:40 2005 *************** struct hblk { *** 760,776 **** # ifdef LARGE_CONFIG # define MAX_ROOT_SETS 4096 # else ! # ifdef PCR ! # define MAX_ROOT_SETS 1024 ! # else ! # if defined(MSWIN32) || defined(MSWINCE) ! # define MAX_ROOT_SETS 1024 ! /* Under NT, we add only written pages, which can result */ ! /* in many small root sets. */ ! # else ! # define MAX_ROOT_SETS 256 ! # endif ! # endif # endif # define MAX_EXCLUSIONS (MAX_ROOT_SETS/4) --- 760,768 ---- # ifdef LARGE_CONFIG # define MAX_ROOT_SETS 4096 # else ! /* GCJ LOCAL: MAX_ROOT_SETS increased to permit more shared */ ! /* libraries to be loaded. */ ! # define MAX_ROOT_SETS 1024 # endif # define MAX_EXCLUSIONS (MAX_ROOT_SETS/4) diff -Nrcpad gcc-4.0.2/fastjar/.cvsignore gcc-4.0.3/fastjar/.cvsignore *** gcc-4.0.2/fastjar/.cvsignore Tue Jun 15 07:36:33 2004 --- gcc-4.0.3/fastjar/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/fastjar/ChangeLog gcc-4.0.3/fastjar/ChangeLog *** gcc-4.0.2/fastjar/ChangeLog Wed Sep 21 03:55:15 2005 --- gcc-4.0.3/fastjar/ChangeLog Thu Mar 9 20:45:24 2006 *************** *** 1,3 **** --- 1,12 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + + 2006-01-31 Tom Tromey + + * jartool.c (version): Use 2006. + * jargrep.c (version): Use 2006. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/fastjar/fastjar.1 gcc-4.0.3/fastjar/fastjar.1 *** gcc-4.0.2/fastjar/fastjar.1 Wed Sep 28 06:40:03 2005 --- gcc-4.0.3/fastjar/fastjar.1 Thu Mar 9 21:12:20 2006 *************** *** 129,135 **** .\" ======================================================================== .\" .IX Title "FASTJAR 1" ! .TH FASTJAR 1 "2005-09-28" "gcc-4.0.2" "GNU" .SH "NAME" fastjar \- archive tool for Java archives .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "FASTJAR 1" ! .TH FASTJAR 1 "2006-03-09" "gcc-4.0.3" "GNU" .SH "NAME" fastjar \- archive tool for Java archives .SH "SYNOPSIS" diff -Nrcpad gcc-4.0.2/fastjar/fastjar.info gcc-4.0.3/fastjar/fastjar.info *** gcc-4.0.2/fastjar/fastjar.info Wed Sep 28 06:40:02 2005 --- gcc-4.0.3/fastjar/fastjar.info Thu Mar 9 21:12:18 2006 *************** *** 1,5 **** This is fastjar.info, produced by makeinfo version 4.8 from ! /scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/fastjar/fastjar.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY --- 1,5 ---- This is fastjar.info, produced by makeinfo version 4.8 from ! /scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/fastjar/fastjar.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY diff -Nrcpad gcc-4.0.2/fastjar/grepjar.1 gcc-4.0.3/fastjar/grepjar.1 *** gcc-4.0.2/fastjar/grepjar.1 Wed Sep 28 06:40:03 2005 --- gcc-4.0.3/fastjar/grepjar.1 Thu Mar 9 21:12:20 2006 *************** *** 129,135 **** .\" ======================================================================== .\" .IX Title "GREPJAR 1" ! .TH GREPJAR 1 "2005-09-28" "gcc-4.0.2" "GNU" .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GREPJAR 1" ! .TH GREPJAR 1 "2006-03-09" "gcc-4.0.3" "GNU" .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" diff -Nrcpad gcc-4.0.2/fastjar/jargrep.c gcc-4.0.3/fastjar/jargrep.c *** gcc-4.0.2/fastjar/jargrep.c Tue Jan 28 22:25:47 2003 --- gcc-4.0.3/fastjar/jargrep.c Thu Feb 2 00:50:08 2006 *************** *** 1,6 **** /* jargrep.c - main functions for jargrep utility ! Copyright (C) 2002, 2003 Free Software Foundation Copyright (C) 1999, 2000 Bryan Burns Copyright (C) 2000 Cory Hollingsworth --- 1,6 ---- /* jargrep.c - main functions for jargrep utility ! Copyright (C) 2002, 2003, 2006 Free Software Foundation Copyright (C) 1999, 2000 Bryan Burns Copyright (C) 2000 Cory Hollingsworth *************** void version () *** 783,789 **** printf("grepjar (%s) %s\n\n", PACKAGE, VERSION); printf("Copyright 1999, 2000, 2001 Bryan Burns\n"); printf("Copyright 2000 Cory Hollingsworth\n"); ! printf("Copyright 2002 Free Software Foundation\n"); printf("\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); --- 783,789 ---- printf("grepjar (%s) %s\n\n", PACKAGE, VERSION); printf("Copyright 1999, 2000, 2001 Bryan Burns\n"); printf("Copyright 2000 Cory Hollingsworth\n"); ! printf("Copyright 2006 Free Software Foundation\n"); printf("\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); diff -Nrcpad gcc-4.0.2/fastjar/jartool.c gcc-4.0.3/fastjar/jartool.c *** gcc-4.0.2/fastjar/jartool.c Thu Sep 23 23:40:33 2004 --- gcc-4.0.3/fastjar/jartool.c Thu Feb 2 00:50:08 2006 *************** *** 1,6 **** /* jartool.c - main functions for fastjar utility ! Copyright (C) 2002, 2004 Free Software Foundation Copyright (C) 1999, 2000, 2001 Bryan Burns This program is free software; you can redistribute it and/or --- 1,6 ---- /* jartool.c - main functions for fastjar utility ! Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation Copyright (C) 1999, 2000, 2001 Bryan Burns This program is free software; you can redistribute it and/or *************** void version () *** 2216,2222 **** { printf("jar (%s) %s\n\n", PACKAGE, VERSION); printf("Copyright 1999, 2000, 2001 Bryan Burns\n"); ! printf("Copyright 2002, 2004 Free Software Foundation\n"); printf("\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); --- 2216,2222 ---- { printf("jar (%s) %s\n\n", PACKAGE, VERSION); printf("Copyright 1999, 2000, 2001 Bryan Burns\n"); ! printf("Copyright 2006 Free Software Foundation\n"); printf("\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); diff -Nrcpad gcc-4.0.2/gcc/java/ChangeLog gcc-4.0.3/gcc/java/ChangeLog *** gcc-4.0.2/gcc/java/ChangeLog Wed Sep 21 03:57:07 2005 --- gcc-4.0.3/gcc/java/ChangeLog Thu Mar 9 20:44:08 2006 *************** *** 1,3 **** --- 1,212 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + + 2006-02-10 Tom Tromey + + PR java/26204: + * jcf-write.c (generate_bytecode_insns): Removed unused variable. + + 2006-01-21 Joseph S. Myers + + * jv-scan.c (version), jcf-dump.c (version), gjavah.c (version): + Update copyright notice dates. + + 2005-12-16 Alexandre Oliva + + * jcf-parse.c (set_source_filename): Set the decl source location + even when returning early. + + 2005-12-15 Tom Tromey + Andrew Haley + + PR java/25429 + * parse.y (resolve_expression_name): Don't generate accessor + methods for constant fields. + + 2005-12-06 Tom Tromey + + PR java/25283: + * parse.y (patch_new_array_init): Revert previous patch. + (lookup_method_invoke): Use size-less array type when creating an + anonymous constructor. + + 2005-12-05 Tom Tromey + + * parse.y (patch_new_array_init): Don't set length on array. + + 2005-11-29 Tom Tromey + + PR java/18278: + * expr.c (build_jni_stub): Unwrap the return value. + * java-tree.h (soft_unwrapjni_node): New define. + (enum java_tree_index): Added JTI_SOFT_UNWRAPJNI_NODE. + * decl.c (java_init_decl_processing): Initialize + soft_unwrapjni_node. + + 2005-12-04 Alexandre Oliva + + 2005-06-13 Per Bothner + * expr.c (int highest_label_pc_this_method, + start_label_pc_this_method): New globals. + (lookup_label): Add start_label_pc_this_method to pc for label, and + update highest_label_pc_this_method. This prevents conflicts between + labels from different methods. + * java-tree.h: Declare new globals. + * jcf-parse.c (parse_class_file): If needed bump + start_label_pc_this_method and reset highest_label_pc_this_method. + + 2005-11-24 Bryce McKinlay + + * gcj.texi (gij options): Add -Xss documentation. + + 2005-11-08 Terry Laurenzo + + PR java/20993 + * gjavah.c (HANDLE_CODE_ATTRIBUTE): Only define for ELF Object + formats. + * gjavah.c (decompile_method): Add ATTRIBUTE_UNUSED + + 2005-10-24 Wil Mahan + + PR java/23617 + * zextract.c (read_zip_archive): Fix out of memory error when + reading jar files with zip-style comments. + + 2005-10-14 Nathan Sidwell + Wil Mahan + + PR java/23620 + * class.c (make_class): Create empty binfo here. + (set_super_info): Only create binfo if we have superclasses. + + 2005-10-12 Bryce McKinlay + + * lang.c (flag_new_verifier): Set on by default. + (java_post_options): Don't need to set flag_new_verifier. + + 2005-10-12 Tom Tromey + + PR java/21540, PR java/13788: + * parse.y (java_complete_lhs) : Use + fold_constant_for_init. + (patch_binop): Added 'folding' argument. Updated all callers. + (patch_unaryop) : New case. + (fold_constant_for_init) : Likewise. + (fold_constant_for_init) : Fix sense of test. + + 2005-10-05 Ranjit Mathew + + PR java/20338 + * decl.c (finish_method): Emit _Jv_InitClass for private static + methods inside inner classes as well. + + 2005-10-05 Ranjit Mathew + + PR java/19870 + * parse.y (nested_field_access_p): Rename to nested_member_access_p + and expand to handle method accesses across nested classes. + (build_outer_method_access_method): Rename to + build_nested_method_access_method. Minor adjustments to comments. + (resolve_expression_name): Use the newly-renamed + nested_member_access_p method. + (resolve_qualified_expression_name): Likewise. + (patch_method_invocation): Also consider static methods for access + method generation. Minor adjustments to comments. + (maybe_use_access_method): Use the more general + nested_memeber_access_p to determine access across nested class + boundaries. Allow THIS_ARG to be NULL (for static methods). + + 2005-10-05 Tom Tromey + + PR java/21844: + * parse.y (nested_field_access_p): Handle case where outer field + is inherited by enclosing class. + + 2005-10-05 Ranjit Mathew + + PR java/19870. + * java-tree.h (OUTER_FIELD_ACCESS_IDENTIFIER_P): Rename to + NESTED_FIELD_ACCESS_IDENTIFIER_P. + (FIELD_INNER_ACCESS): Rename to FIELD_NESTED_ACCESS. + (FIELD_INNER_ACCESS_P): Rename to FIELD_NESTED_ACCESS_P. + * jcf-write.c (generate_classfile): Use + NESTED_FIELD_ACCESS_IDENTIFIER_P instead of + OUTER_FIELD_ACCESS_IDENTIFIER_P. + * parse.y (build_outer_field_access): Rename to + build_nested_field_access. Support static fields and outer-to-inner + class accesses. + (outer_field_access_p): Rename to nested_field_access_p. Support + static fields and generalise to outer-to-inner class and sibling + inner class accesses. + (outer_field_expanded_access_p): Rename to + nested_field_expanded_access_p and support static fields. + (outer_field_access_fix): Rename to nested_field_access_fix and + support static fields. + (build_outer_field_access_expr): Rename to + build_nested_field_access_expr and support static fields. + (build_outer_field_access_methods): Rename to + build_nested_field_access_methods and support static fields. For + static fields, generate accessors without class instance parameters. + (build_outer_field_access_method): Rename to + build_nested_field_access_method and support static fields. + (build_outer_method_access_method): Use + NESTED_FIELD_ACCESS_IDENTIFIER_P instead of + OUTER_FIELD_ACCESS_IDENTIFIER_P. + (resolve_expression_name): Consider static field accesses across + nested classes. + (resolve_qualified_expression_name): Likewise. + (java_complete_lhs): Use nested_field_access_fix instead of + outer_field_access_fix. + (patch_unary_op): Rename outer_field_flag to nested_field_flag. + Use nested_field_expanded_access_p instead of + outer_field_expanded_access_p. Use nested_field_access_fix instead + of outer_field_access_fix. + (check_thrown_exceptions): Use NESTED_FIELD_ACCESS_IDENTIFIER_P + instead of OUTER_FIELD_ACCESS_IDENTIFIER_P. + + 2005-10-01 Ranjit Mathew + + PR java/21418 + * class.c (inherits_from_p): Try to lay out super class + if it is not already laid out. + (maybe_layout_super_class): Handle the case where SUPER_CLASS + is a NULL_TREE. + + 2005-10-01 Per Bothner + + * class.c (inherits_from_p): Do load_class if needed. + + 2005-10-01 Bryce McKinlay + + PR java/23891 + * parse.y (maybe_create_class_interface_decl): Set TYPE_PACKAGE for + the newly created type. Set import lists here, not in create_class. + (jdep_resolve_class): Set current_class. + (do_resolve_class): Use current_class's TYPE_PACKAGE to determine + the current package context, not ctxp->package. + (cicp_cache): Removed. + (class_in_current_package): Simplify implementation using + TYPE_PACKAGE. + * jcf-parse.c (give_name_to_class): Set TYPE_PACKAGE. + * java-tree.h (TYPE_PACKAGE): New macro. + (struct lang_type): New member 'package'. + * class.c (maybe_layout_super_class): Update current_class before + calling do_resolve_class. + + 2005-09-30 Andrew Haley + + PR libgcj/23182 + * expr.c (pop_type_0): If the expected type is object or ptr + (i.e. void*), return the type of the object we just popped from + the stack. + + 2005-09-29 Tom Tromey + + PR java/24120: + * jcf-io.c (memoized_dirlist_hash): New function. + (caching_stat): Use it. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/gcc/java/class.c gcc-4.0.3/gcc/java/class.c *** gcc-4.0.2/gcc/java/class.c Wed Aug 17 22:08:15 2005 --- gcc-4.0.3/gcc/java/class.c Fri Oct 14 08:48:02 2005 *************** make_class (void) *** 316,321 **** --- 316,324 ---- { tree type; type = make_node (RECORD_TYPE); + /* Unfortunately we must create the binfo here, so that class + loading works. */ + TYPE_BINFO (type) = make_tree_binfo (0); MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type); return type; *************** set_super_info (int access_flags, tree t *** 464,470 **** if (super_class) total_supers++; ! TYPE_BINFO (this_class) = make_tree_binfo (total_supers); TYPE_VFIELD (this_class) = TYPE_VFIELD (object_type_node); if (super_class) { --- 467,474 ---- if (super_class) total_supers++; ! if (total_supers) ! TYPE_BINFO (this_class) = make_tree_binfo (total_supers); TYPE_VFIELD (this_class) = TYPE_VFIELD (object_type_node); if (super_class) { *************** inherits_from_p (tree type1, tree type2) *** 545,551 **** { if (type1 == type2) return 1; ! type1 = CLASSTYPE_SUPER (type1); } return 0; } --- 549,559 ---- { if (type1 == type2) return 1; ! ! if (! CLASS_LOADED_P (type1)) ! load_class (type1, 1); ! ! type1 = maybe_layout_super_class (CLASSTYPE_SUPER (type1), type1); } return 0; } *************** push_super_field (tree this_class, tree *** 2045,2051 **** static tree maybe_layout_super_class (tree super_class, tree this_class) { ! if (TREE_CODE (super_class) == RECORD_TYPE) { if (!CLASS_LOADED_P (super_class) && CLASS_FROM_SOURCE_P (super_class)) safe_layout_class (super_class); --- 2053,2061 ---- static tree maybe_layout_super_class (tree super_class, tree this_class) { ! if (!super_class) ! return NULL_TREE; ! else if (TREE_CODE (super_class) == RECORD_TYPE) { if (!CLASS_LOADED_P (super_class) && CLASS_FROM_SOURCE_P (super_class)) safe_layout_class (super_class); *************** maybe_layout_super_class (tree super_cla *** 2064,2069 **** --- 2074,2082 ---- we give it one. */ tree this_wrap = NULL_TREE; + /* Set the correct context for class resolution. */ + current_class = this_class; + if (this_class) { tree this_decl = TYPE_NAME (this_class); diff -Nrcpad gcc-4.0.2/gcc/java/decl.c gcc-4.0.3/gcc/java/decl.c *** gcc-4.0.2/gcc/java/decl.c Thu May 26 14:38:43 2005 --- gcc-4.0.3/gcc/java/decl.c Tue Dec 6 02:13:54 2005 *************** java_init_decl_processing (void) *** 1155,1160 **** --- 1155,1166 ---- build_function_type (void_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); + t = tree_cons (NULL_TREE, object_ptr_type_node, endlink); + soft_unwrapjni_node + = builtin_function ("_Jv_UnwrapJNIweakReference", + build_function_type (object_ptr_type_node, t), + 0, NOT_BUILT_IN, NULL, NULL_TREE); + t = tree_cons (NULL_TREE, int_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_idiv_node *************** finish_method (tree fndecl) *** 2082,2088 **** /* Prepend class initialization for static methods reachable from other classes. */ ! if (METHOD_STATIC (fndecl) && ! METHOD_PRIVATE (fndecl) && ! DECL_CLINIT_P (fndecl) && ! CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (fndecl)))) { --- 2088,2096 ---- /* Prepend class initialization for static methods reachable from other classes. */ ! if (METHOD_STATIC (fndecl) ! && (! METHOD_PRIVATE (fndecl) ! || INNER_CLASS_P (DECL_CONTEXT (fndecl))) && ! DECL_CLINIT_P (fndecl) && ! CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (fndecl)))) { diff -Nrcpad gcc-4.0.2/gcc/java/expr.c gcc-4.0.3/gcc/java/expr.c *** gcc-4.0.2/gcc/java/expr.c Mon May 9 13:49:54 2005 --- gcc-4.0.3/gcc/java/expr.c Tue Dec 6 02:13:54 2005 *************** int stack_pointer; *** 138,143 **** --- 138,149 ---- const unsigned char *linenumber_table; int linenumber_count; + /* Largest pc so far in this method that has been passed to lookup_label. */ + int highest_label_pc_this_method = -1; + + /* Base value for this method to add to pc to get generated label. */ + int start_label_pc_this_method = 0; + void init_expr_processing (void) { *************** pop_type_0 (tree type, char **messagep) *** 346,351 **** --- 352,362 ---- { if (flag_new_verifier) { + /* If the expected type we've been passed is object or ptr + (i.e. void*), the caller needs to know the real type. */ + if (type == ptr_type_node || type == object_ptr_type_node) + return t; + /* Since the verifier has already run, we know that any types we see will be compatible. In BC mode, this fact may be checked at runtime, but if that is so then we can *************** lookup_label (int pc) *** 1766,1772 **** { tree name; char buf[32]; ! ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", pc); name = get_identifier (buf); if (IDENTIFIER_LOCAL_VALUE (name)) return IDENTIFIER_LOCAL_VALUE (name); --- 1777,1785 ---- { tree name; char buf[32]; ! if (pc > highest_label_pc_this_method) ! highest_label_pc_this_method = pc; ! ASM_GENERATE_INTERNAL_LABEL(buf, "LJpc=", start_label_pc_this_method + pc); name = get_identifier (buf); if (IDENTIFIER_LOCAL_VALUE (name)) return IDENTIFIER_LOCAL_VALUE (name); *************** build_jni_stub (tree method) *** 2602,2609 **** /* If the JNI call returned a result, capture it here. If we had to unwrap JNI object results, we would do that here. */ if (res_var != NULL_TREE) ! call = build2 (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (method)), ! res_var, call); TREE_SIDE_EFFECTS (call) = 1; CAN_COMPLETE_NORMALLY (call) = 1; --- 2615,2631 ---- /* If the JNI call returned a result, capture it here. If we had to unwrap JNI object results, we would do that here. */ if (res_var != NULL_TREE) ! { ! /* If the call returns an object, it may return a JNI weak ! reference, in which case we must unwrap it. */ ! if (! JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_TYPE (method)))) ! call = build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (method)), ! build_address_of (soft_unwrapjni_node), ! build_tree_list (NULL_TREE, call), ! NULL_TREE); ! call = build2 (MODIFY_EXPR, TREE_TYPE (TREE_TYPE (method)), ! res_var, call); ! } TREE_SIDE_EFFECTS (call) = 1; CAN_COMPLETE_NORMALLY (call) = 1; diff -Nrcpad gcc-4.0.2/gcc/java/gcj.texi gcc-4.0.3/gcc/java/gcj.texi *** gcc-4.0.2/gcc/java/gcj.texi Fri May 13 20:40:34 2005 --- gcc-4.0.3/gcc/java/gcj.texi Fri Nov 25 03:56:18 2005 *************** Set the initial heap size. *** 1102,1107 **** --- 1102,1110 ---- @item -Xmx@var{size} Set the maximum heap size. + + @item -Xss@var{size} + Set the thread stack size. @end table Unrecognized @code{-X} options are ignored, for compatibility with diff -Nrcpad gcc-4.0.2/gcc/java/gjavah.c gcc-4.0.3/gcc/java/gjavah.c *** gcc-4.0.2/gcc/java/gjavah.c Mon Jun 6 19:20:56 2005 --- gcc-4.0.3/gcc/java/gjavah.c Sat Jan 21 18:38:48 2006 *************** *** 1,7 **** /* Program to write C++-suitable header files from a Java(TM) .class file. This is similar to SUN's javah. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* Program to write C++-suitable header files from a Java(TM) .class file. This is similar to SUN's javah. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. *************** static void print_method_info (FILE*, JC *** 145,151 **** static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int); static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int); static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int); ! static void decompile_method (FILE*, JCF*, int); static void add_class_decl (FILE*, JCF*, JCF_u2); static void print_name (FILE *, JCF *, int); --- 145,151 ---- static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int); static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int); static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int); ! static void decompile_method (FILE*, JCF*, int) ATTRIBUTE_UNUSED; static void add_class_decl (FILE*, JCF*, JCF_u2); static void print_name (FILE *, JCF *, int); *************** static int is_first_data_member = 0; *** 250,257 **** --- 250,263 ---- } \ } + /* Only include byte-code decompilation optimizations for ELF targets + since the generated headers are only known to work with ELF weak + symbol semnatics. Specifically, these optimizations are known to + not work on PE-COFF and possibly others. */ + #ifdef OBJECT_FORMAT_ELF #define HANDLE_CODE_ATTRIBUTE(MAX_STACK, MAX_LOCALS, CODE_LENGTH) \ if (out && method_declared) decompile_method (out, jcf, CODE_LENGTH); + #endif static int decompiled = 0; #define HANDLE_END_METHOD() \ *************** static void *** 2397,2403 **** version (void) { printf (TOOLNAME " (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); --- 2403,2409 ---- version (void) { printf (TOOLNAME " (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); diff -Nrcpad gcc-4.0.2/gcc/java/java-tree.h gcc-4.0.3/gcc/java/java-tree.h *** gcc-4.0.2/gcc/java/java-tree.h Mon Jun 6 19:20:57 2005 --- gcc-4.0.3/gcc/java/java-tree.h Tue Dec 6 02:13:54 2005 *************** struct JCF; *** 71,77 **** IS_CRAFTED_STRING_BUFFER_P (in CALL_EXPR) IS_INIT_CHECKED (in SAVE_EXPR) 6: CAN_COMPLETE_NORMALLY (in statement nodes) ! OUTER_FIELD_ACCESS_IDENTIFIER_P (in IDENTIFIER_NODE) Usage of TYPE_LANG_FLAG_?: 0: CLASS_ACCESS0_GENERATED_P (in RECORD_TYPE) --- 71,77 ---- IS_CRAFTED_STRING_BUFFER_P (in CALL_EXPR) IS_INIT_CHECKED (in SAVE_EXPR) 6: CAN_COMPLETE_NORMALLY (in statement nodes) ! NESTED_FIELD_ACCESS_IDENTIFIER_P (in IDENTIFIER_NODE) Usage of TYPE_LANG_FLAG_?: 0: CLASS_ACCESS0_GENERATED_P (in RECORD_TYPE) *************** extern int always_initialize_class_p; *** 242,247 **** --- 242,253 ---- extern int flag_verify_invocations; + /* Largest pc so far in this method that has been passed to lookup_label. */ + extern int highest_label_pc_this_method; + + /* Base value for this method to add to pc to get generated label. */ + extern int start_label_pc_this_method; + typedef struct CPool constant_pool; #define CONSTANT_ResolvedFlag 16 *************** enum java_tree_index *** 402,407 **** --- 408,414 ---- JTI_SOFT_LOOKUPJNIMETHOD_NODE, JTI_SOFT_GETJNIENVNEWFRAME_NODE, JTI_SOFT_JNIPOPSYSTEMFRAME_NODE, + JTI_SOFT_UNWRAPJNI_NODE, JTI_SOFT_FMOD_NODE, JTI_SOFT_IDIV_NODE, JTI_SOFT_IREM_NODE, *************** extern GTY(()) tree java_global_trees[JT *** 669,674 **** --- 676,683 ---- java_global_trees[JTI_SOFT_GETJNIENVNEWFRAME_NODE] #define soft_jnipopsystemframe_node \ java_global_trees[JTI_SOFT_JNIPOPSYSTEMFRAME_NODE] + #define soft_unwrapjni_node \ + java_global_trees[JTI_SOFT_UNWRAPJNI_NODE] #define soft_fmod_node \ java_global_trees[JTI_SOFT_FMOD_NODE] #define soft_idiv_node \ *************** union lang_tree_node *** 905,920 **** #define DECL_LOCAL_START_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.start_pc) /* The end (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_END_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.end_pc) ! /* For a VAR_DECLor PARM_DECL, used to chain decls with the same slot_number in decl_map. */ #define DECL_LOCAL_SLOT_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain) /* For a FIELD_DECL, holds the name of the access method. Used to ! read/write the content of the field from an inner class. */ ! #define FIELD_INNER_ACCESS(DECL) \ (DECL_LANG_SPECIFIC (VAR_OR_FIELD_CHECK (DECL))->u.v.am) ! /* Safely tests whether FIELD_INNER_ACCESS exists or not. */ ! #define FIELD_INNER_ACCESS_P(DECL) \ ! DECL_LANG_SPECIFIC (DECL) && FIELD_INNER_ACCESS (DECL) /* True if a final field was initialized upon its declaration or in an initializer. Set after definite assignment. */ #define DECL_FIELD_FINAL_IUD(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.final_iud) --- 914,929 ---- #define DECL_LOCAL_START_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.start_pc) /* The end (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_END_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.end_pc) ! /* For a VAR_DECL or PARM_DECL, used to chain decls with the same slot_number in decl_map. */ #define DECL_LOCAL_SLOT_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain) /* For a FIELD_DECL, holds the name of the access method. Used to ! read/write the content of the field across nested class boundaries. */ ! #define FIELD_NESTED_ACCESS(DECL) \ (DECL_LANG_SPECIFIC (VAR_OR_FIELD_CHECK (DECL))->u.v.am) ! /* Safely tests whether FIELD_NESTED_ACCESS exists or not. */ ! #define FIELD_NESTED_ACCESS_P(DECL) \ ! DECL_LANG_SPECIFIC (DECL) && FIELD_NESTED_ACCESS (DECL) /* True if a final field was initialized upon its declaration or in an initializer. Set after definite assignment. */ #define DECL_FIELD_FINAL_IUD(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.final_iud) *************** struct lang_decl GTY(()) *** 1111,1116 **** --- 1120,1126 ---- #define TYPE_TO_RUNTIME_MAP(T) (TYPE_LANG_SPECIFIC (T)->type_to_runtime_map) #define TYPE_ASSERTIONS(T) (TYPE_LANG_SPECIFIC (T)->type_assertions) + #define TYPE_PACKAGE(T) (TYPE_LANG_SPECIFIC (T)->package) struct lang_type GTY(()) { *************** struct lang_type GTY(()) *** 1159,1164 **** --- 1169,1177 ---- /* Table of type assertions to be evaluated by the runtime when this class is loaded. */ + tree package; /* IDENTIFIER_NODE for package this class is + a member of. */ + unsigned pic:1; /* Private Inner Class. */ unsigned poic:1; /* Protected Inner Class. */ unsigned strictfp:1; /* `strictfp' class. */ *************** extern tree *type_map; *** 1690,1698 **** /* True if NODE (a statement) can complete normally. */ #define CAN_COMPLETE_NORMALLY(NODE) TREE_LANG_FLAG_6 (NODE) ! /* True if NODE (an IDENTIFIER) bears the name of a outer field from ! inner class access function. */ ! #define OUTER_FIELD_ACCESS_IDENTIFIER_P(NODE) \ TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (NODE)) /* True if NODE belongs to an inner class TYPE_DECL node. --- 1703,1711 ---- /* True if NODE (a statement) can complete normally. */ #define CAN_COMPLETE_NORMALLY(NODE) TREE_LANG_FLAG_6 (NODE) ! /* True if NODE (an IDENTIFIER) bears the name of an outer field from ! inner class (or vice versa) access function. */ ! #define NESTED_FIELD_ACCESS_IDENTIFIER_P(NODE) \ TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (NODE)) /* True if NODE belongs to an inner class TYPE_DECL node. diff -Nrcpad gcc-4.0.2/gcc/java/jcf-dump.c gcc-4.0.3/gcc/java/jcf-dump.c *** gcc-4.0.2/gcc/java/jcf-dump.c Tue Apr 26 00:30:22 2005 --- gcc-4.0.3/gcc/java/jcf-dump.c Sat Jan 21 18:38:48 2006 *************** *** 1,8 **** /* Program to dump out a Java(TM) .class file. Functionally similar to Sun's javap. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 ! Free Software Foundation, Inc. This file is part of GCC. --- 1,8 ---- /* Program to dump out a Java(TM) .class file. Functionally similar to Sun's javap. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, ! 2006 Free Software Foundation, Inc. This file is part of GCC. *************** static void *** 913,919 **** version (void) { printf ("jcf-dump (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); --- 913,919 ---- version (void) { printf ("jcf-dump (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); diff -Nrcpad gcc-4.0.2/gcc/java/jcf-io.c gcc-4.0.3/gcc/java/jcf-io.c *** gcc-4.0.2/gcc/java/jcf-io.c Sat Mar 12 02:16:28 2005 --- gcc-4.0.3/gcc/java/jcf-io.c Fri Sep 30 00:32:41 2005 *************** typedef struct memoized_dirlist_entry *** 311,316 **** --- 311,324 ---- struct dirent **files; } memoized_dirlist_entry; + /* A hash function for a memoized_dirlist_entry. */ + static hashval_t + memoized_dirlist_hash (const void *entry) + { + const memoized_dirlist_entry *mde = (const memoized_dirlist_entry *) entry; + return htab_hash_string (mde->dir); + } + /* Returns true if ENTRY (a memoized_dirlist_entry *) corresponds to the directory given by KEY (a char *) giving the directory name. */ *************** caching_stat (char *filename, struct sta *** 341,351 **** char *base; memoized_dirlist_entry *dent; void **slot; /* If the hashtable has not already been created, create it now. */ if (!memoized_dirlists) memoized_dirlists = htab_create (37, ! htab_hash_string, memoized_dirlist_lookup_eq, NULL); --- 349,360 ---- char *base; memoized_dirlist_entry *dent; void **slot; + struct memoized_dirlist_entry temp; /* If the hashtable has not already been created, create it now. */ if (!memoized_dirlists) memoized_dirlists = htab_create (37, ! memoized_dirlist_hash, memoized_dirlist_lookup_eq, NULL); *************** caching_stat (char *filename, struct sta *** 364,371 **** else base = filename; ! /* Obtain the entry for this directory from the hash table. */ ! slot = htab_find_slot (memoized_dirlists, filename, INSERT); if (!*slot) { /* We have not already scanned this directory; scan it now. */ --- 373,385 ---- else base = filename; ! /* Obtain the entry for this directory from the hash table. This ! approach is ok since we know that the hash function only looks at ! the directory name. */ ! temp.dir = filename; ! temp.num_files = 0; ! temp.files = NULL; ! slot = htab_find_slot (memoized_dirlists, &temp, INSERT); if (!*slot) { /* We have not already scanned this directory; scan it now. */ diff -Nrcpad gcc-4.0.2/gcc/java/jcf-parse.c gcc-4.0.3/gcc/java/jcf-parse.c *** gcc-4.0.2/gcc/java/jcf-parse.c Sat Feb 12 15:21:14 2005 --- gcc-4.0.3/gcc/java/jcf-parse.c Fri Dec 16 17:33:31 2005 *************** set_source_filename (JCF *jcf, int index *** 142,148 **** && strcmp (sfname, old_filename + old_len - new_len) == 0 && (old_filename[old_len - new_len - 1] == '/' || old_filename[old_len - new_len - 1] == '\\')) ! return; } if (strchr (sfname, '/') == NULL && strchr (sfname, '\\') == NULL) { --- 142,154 ---- && strcmp (sfname, old_filename + old_len - new_len) == 0 && (old_filename[old_len - new_len - 1] == '/' || old_filename[old_len - new_len - 1] == '\\')) ! { ! #ifndef USE_MAPPED_LOCATION ! DECL_SOURCE_LOCATION (TYPE_NAME (current_class)) = input_location; ! file_start_location = input_location; ! #endif ! return; ! } } if (strchr (sfname, '/') == NULL && strchr (sfname, '\\') == NULL) { *************** give_name_to_class (JCF *jcf, int i) *** 444,449 **** --- 450,456 ---- abort (); else { + tree package_name = NULL_TREE, tmp; tree this_class; int j = JPOOL_USHORT1 (jcf, i); /* verify_constant_pool confirmed that j is a CONSTANT_Utf8. */ *************** give_name_to_class (JCF *jcf, int i) *** 469,474 **** --- 476,484 ---- jcf->cpool.data[i].t = this_class; JPOOL_TAG (jcf, i) = CONSTANT_ResolvedClass; + split_qualified_name (&package_name, &tmp, + DECL_NAME (TYPE_NAME (this_class))); + TYPE_PACKAGE (this_class) = package_name; return this_class; } } *************** parse_class_file (void) *** 915,920 **** --- 925,945 ---- give_name_to_locals (jcf); + /* Bump up start_label_pc_this_method so we get a unique label number + and reset highest_label_pc_this_method. */ + if (highest_label_pc_this_method >= 0) + { + /* We adjust to the next multiple of 1000. This is just a frill + so the last 3 digits of the label number match the bytecode + offset, which might make debugging marginally more convenient. */ + start_label_pc_this_method + = ((((start_label_pc_this_method + highest_label_pc_this_method) + / 1000) + + 1) + * 1000); + highest_label_pc_this_method = -1; + } + /* Convert bytecode to trees. */ expand_byte_code (jcf, method); diff -Nrcpad gcc-4.0.2/gcc/java/jcf-write.c gcc-4.0.3/gcc/java/jcf-write.c *** gcc-4.0.2/gcc/java/jcf-write.c Sun May 15 19:09:12 2005 --- gcc-4.0.3/gcc/java/jcf-write.c Sat Feb 11 00:41:08 2006 *************** *** 1,5 **** /* Write out a Java(TM) class file. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* Write out a Java(TM) class file. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. *************** generate_bytecode_insns (tree exp, int t *** 2233,2239 **** } else { - tree type = TREE_TYPE (exp); emit_load (arg, state); } break; --- 2233,2238 ---- *************** generate_classfile (tree clas, struct jc *** 3088,3094 **** /* Make room for the Synthetic attribute (of zero length.) */ if (DECL_FINIT_P (part) || DECL_INSTINIT_P (part) ! || OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (part)) || TYPE_DOT_CLASS (clas) == part) { i++; --- 3087,3093 ---- /* Make room for the Synthetic attribute (of zero length.) */ if (DECL_FINIT_P (part) || DECL_INSTINIT_P (part) ! || NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (part)) || TYPE_DOT_CLASS (clas) == part) { i++; diff -Nrcpad gcc-4.0.2/gcc/java/jv-scan.c gcc-4.0.3/gcc/java/jv-scan.c *** gcc-4.0.2/gcc/java/jv-scan.c Mon Jun 6 19:20:58 2005 --- gcc-4.0.3/gcc/java/jv-scan.c Sat Jan 21 18:38:48 2006 *************** *** 1,5 **** /* Main for jv-scan ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) --- 1,5 ---- /* Main for jv-scan ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) *************** static void *** 125,131 **** version (void) { printf ("jv-scan (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2004 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); --- 125,131 ---- version (void) { printf ("jv-scan (GCC) %s\n\n", version_string); ! printf ("Copyright %s 2006 Free Software Foundation, Inc.\n", _("(C)")); printf (_("This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n")); exit (0); diff -Nrcpad gcc-4.0.2/gcc/java/lang.c gcc-4.0.3/gcc/java/lang.c *** gcc-4.0.2/gcc/java/lang.c Fri Dec 3 19:43:51 2004 --- gcc-4.0.3/gcc/java/lang.c Thu Oct 13 02:07:40 2005 *************** int flag_deprecated = 1; *** 140,146 **** int flag_verify_invocations = 0; /* True if the new bytecode verifier should be used. */ ! int flag_new_verifier = 0; /* When nonzero, print extra version information. */ static int v_flag = 0; --- 140,146 ---- int flag_verify_invocations = 0; /* True if the new bytecode verifier should be used. */ ! int flag_new_verifier = 1; /* When nonzero, print extra version information. */ static int v_flag = 0; *************** java_post_options (const char **pfilenam *** 611,622 **** must always verify everything. */ if (! flag_indirect_dispatch) flag_verify_invocations = true; - else - { - /* If we are using indirect dispatch, then we want the new - verifier as well. */ - flag_new_verifier = 1; - } /* Open input file. */ --- 611,616 ---- diff -Nrcpad gcc-4.0.2/gcc/java/parse-scan.c gcc-4.0.3/gcc/java/parse-scan.c *** gcc-4.0.2/gcc/java/parse-scan.c Wed Sep 28 06:21:18 2005 --- gcc-4.0.3/gcc/java/parse-scan.c Thu Mar 9 20:51:49 2006 *************** *** 278,284 **** /* Copy the first part of user declarations. */ ! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" #define JC1_LITE --- 278,284 ---- /* Copy the first part of user declarations. */ ! #line 38 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" #define JC1_LITE *************** void report (void); *** 383,389 **** #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" typedef union YYSTYPE { char *node; struct method_declarator *declarator; --- 383,389 ---- #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 128 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" typedef union YYSTYPE { char *node; struct method_declarator *declarator; *************** typedef union YYSTYPE { *** 399,405 **** /* Copy the second part of user declarations. */ ! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" extern int flag_assert; --- 399,405 ---- /* Copy the second part of user declarations. */ ! #line 134 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" extern int flag_assert; *************** yyreduce: *** 2523,2529 **** switch (yyn) { case 11: ! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("int"); --- 2523,2529 ---- switch (yyn) { case 11: ! #line 229 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("int"); *************** yyreduce: *** 2531,2537 **** break; case 12: ! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("double"); --- 2531,2537 ---- break; case 12: ! #line 234 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("double"); *************** yyreduce: *** 2539,2545 **** break; case 13: ! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("boolean"); --- 2539,2545 ---- break; case 13: ! #line 239 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { /* use preset global here. FIXME */ (yyval.node) = xstrdup ("boolean"); *************** yyreduce: *** 2547,2553 **** break; case 19: ! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { while (bracket_count-- > 0) (yyval.node) = concat ("[", (yyvsp[-1].node), NULL); --- 2547,2553 ---- break; case 19: ! #line 264 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { while (bracket_count-- > 0) (yyval.node) = concat ("[", (yyvsp[-1].node), NULL); *************** yyreduce: *** 2555,2561 **** break; case 20: ! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { while (bracket_count-- > 0) (yyval.node) = concat ("[", (yyvsp[-1].node), NULL); --- 2555,2561 ---- break; case 20: ! #line 269 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { while (bracket_count-- > 0) (yyval.node) = concat ("[", (yyvsp[-1].node), NULL); *************** yyreduce: *** 2563,2581 **** break; case 24: ! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { (yyval.node) = concat ((yyvsp[-2].node), ".", (yyvsp[0].node), NULL); ;} break; case 38: ! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { package_name = (yyvsp[-1].node); ;} break; case 46: ! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { if ((yyvsp[0].value) == PUBLIC_TK) modifier_value++; --- 2563,2581 ---- break; case 24: ! #line 287 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { (yyval.node) = concat ((yyvsp[-2].node), ".", (yyvsp[0].node), NULL); ;} break; case 38: ! #line 319 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { package_name = (yyvsp[-1].node); ;} break; case 46: ! #line 346 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { if ((yyvsp[0].value) == PUBLIC_TK) modifier_value++; *************** yyreduce: *** 2586,2592 **** break; case 47: ! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { if ((yyvsp[0].value) == PUBLIC_TK) modifier_value++; --- 2586,2592 ---- break; case 47: ! #line 354 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { if ((yyvsp[0].value) == PUBLIC_TK) modifier_value++; *************** yyreduce: *** 2597,2603 **** break; case 48: ! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration((yyvsp[-2].node)); modifier_value = 0; --- 2597,2603 ---- break; case 48: ! #line 366 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration((yyvsp[-2].node)); modifier_value = 0; *************** yyreduce: *** 2605,2676 **** break; case 50: ! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration((yyvsp[-2].node)); ;} break; case 56: ! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 57: ! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 58: ! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 59: ! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 71: ! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 72: ! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 77: ! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { bracket_count = 0; USE_ABSORBER; ;} break; case 78: ! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++bracket_count; ;} break; case 81: ! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++method_depth; ;} break; case 82: ! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { --method_depth; ;} break; case 83: ! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 85: ! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 86: ! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_main_declaration ((yyvsp[-1].declarator)); modifier_value = 0; --- 2605,2676 ---- break; case 50: ! #line 372 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration((yyvsp[-2].node)); ;} break; case 56: ! #line 386 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 57: ! #line 388 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 58: ! #line 393 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 59: ! #line 395 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 71: ! #line 421 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 72: ! #line 423 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 77: ! #line 439 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { bracket_count = 0; USE_ABSORBER; ;} break; case 78: ! #line 441 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++bracket_count; ;} break; case 81: ! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++method_depth; ;} break; case 82: ! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { --method_depth; ;} break; case 83: ! #line 459 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 85: ! #line 462 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 86: ! #line 464 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_main_declaration ((yyvsp[-1].declarator)); modifier_value = 0; *************** yyreduce: *** 2678,2684 **** break; case 87: ! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { struct method_declarator *d; NEW_METHOD_DECLARATOR (d, (yyvsp[-2].node), NULL); --- 2678,2684 ---- break; case 87: ! #line 472 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { struct method_declarator *d; NEW_METHOD_DECLARATOR (d, (yyvsp[-2].node), NULL); *************** yyreduce: *** 2687,2693 **** break; case 88: ! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { struct method_declarator *d; NEW_METHOD_DECLARATOR (d, (yyvsp[-3].node), (yyvsp[-1].node)); --- 2687,2693 ---- break; case 88: ! #line 478 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { struct method_declarator *d; NEW_METHOD_DECLARATOR (d, (yyvsp[-3].node), (yyvsp[-1].node)); *************** yyreduce: *** 2696,2709 **** break; case 91: ! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { (yyval.node) = concat ((yyvsp[-2].node), ",", (yyvsp[0].node), NULL); ;} break; case 92: ! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; if (bracket_count) --- 2696,2709 ---- break; case 91: ! #line 489 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { (yyval.node) = concat ((yyvsp[-2].node), ",", (yyvsp[0].node), NULL); ;} break; case 92: ! #line 496 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; if (bracket_count) *************** yyreduce: *** 2721,2727 **** break; case 93: ! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { if (bracket_count) { --- 2721,2727 ---- break; case 93: ! #line 511 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { if (bracket_count) { *************** yyreduce: *** 2738,3009 **** break; case 96: ! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 97: ! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 101: ! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 103: ! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 105: ! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 106: ! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 107: ! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 114: ! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 115: ! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 118: ! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;} break; case 120: ! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;} break; case 122: ! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;} break; case 124: ! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;} break; case 128: ! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 129: ! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 152: ! #line 686 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 153: ! #line 688 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 178: ! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 189: ! #line 757 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 190: ! #line 762 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 191: ! #line 767 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 199: ! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 204: ! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 208: ! #line 819 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 214: ! #line 837 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 225: ! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 228: ! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 231: ! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" {yyerror ("Missing term"); RECOVER;;} break; case 232: ! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" {yyerror ("';' expected"); RECOVER;;} break; case 235: ! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 241: ! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 242: ! #line 908 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 253: ! #line 930 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 254: ! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 255: ! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 256: ! #line 939 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 257: ! #line 941 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 265: ! #line 956 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration (anonymous_context); ;} break; case 267: ! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { report_class_declaration (anonymous_context); ;} break; case 269: ! #line 965 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 283: ! #line 997 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { bracket_count = 1; ;} break; case 284: ! #line 999 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { bracket_count++; ;} break; case 287: ! #line 1012 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ++complexity; ;} break; case 288: ! #line 1014 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ++complexity; ;} break; case 289: ! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 290: ! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 291: ! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 292: ! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 293: ! #line 1023 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 296: ! #line 1030 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 343: ! #line 1126 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 345: ! #line 1132 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 347: ! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { ++complexity; ;} break; case 351: ! #line 1152 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; --- 2738,3009 ---- break; case 96: ! #line 532 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 97: ! #line 534 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 101: ! #line 549 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 103: ! #line 560 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 105: ! #line 565 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 106: ! #line 572 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 107: ! #line 574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 114: ! #line 591 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 115: ! #line 593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 118: ! #line 605 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;} break; case 120: ! #line 608 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[0].node)); modifier_value = 0; ;} break; case 122: ! #line 611 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;} break; case 124: ! #line 614 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration ((yyvsp[-1].node)); modifier_value = 0; ;} break; case 128: ! #line 625 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 129: ! #line 627 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { pop_class_context (); ;} break; case 152: ! #line 686 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 153: ! #line 688 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { modifier_value = 0; ;} break; case 178: ! #line 729 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 189: ! #line 757 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 190: ! #line 762 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 191: ! #line 767 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 199: ! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 204: ! #line 802 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 208: ! #line 819 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 214: ! #line 837 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 225: ! #line 862 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 228: ! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 231: ! #line 878 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" {yyerror ("Missing term"); RECOVER;;} break; case 232: ! #line 880 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" {yyerror ("';' expected"); RECOVER;;} break; case 235: ! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 241: ! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 242: ! #line 908 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 253: ! #line 930 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 254: ! #line 935 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 255: ! #line 937 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 256: ! #line 939 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 257: ! #line 941 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 265: ! #line 956 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration (anonymous_context); ;} break; case 267: ! #line 959 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { report_class_declaration (anonymous_context); ;} break; case 269: ! #line 965 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 283: ! #line 997 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { bracket_count = 1; ;} break; case 284: ! #line 999 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { bracket_count++; ;} break; case 287: ! #line 1012 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ++complexity; ;} break; case 288: ! #line 1014 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ++complexity; ;} break; case 289: ! #line 1015 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 290: ! #line 1016 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 291: ! #line 1017 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 292: ! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 293: ! #line 1023 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 296: ! #line 1030 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; case 343: ! #line 1126 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 345: ! #line 1132 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 347: ! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { ++complexity; ;} break; case 351: ! #line 1152 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" { USE_ABSORBER; ;} break; *************** yyreturn: *** 3239,3245 **** } ! #line 1170 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse-scan.y" /* Create a new parser context */ --- 3239,3245 ---- } ! #line 1170 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse-scan.y" /* Create a new parser context */ diff -Nrcpad gcc-4.0.2/gcc/java/parse.c gcc-4.0.3/gcc/java/parse.c *** gcc-4.0.2/gcc/java/parse.c Wed Sep 28 06:21:18 2005 --- gcc-4.0.3/gcc/java/parse.c Thu Mar 9 20:51:49 2006 *************** *** 286,292 **** /* Copy the first part of user declarations. */ ! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" #include "config.h" #include "system.h" --- 286,292 ---- /* Copy the first part of user declarations. */ ! #line 49 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" #include "config.h" #include "system.h" *************** static tree build_new_invocation (tree, *** 403,409 **** static tree build_assignment (int, int, tree, tree); static tree build_binop (enum tree_code, int, tree, tree); static tree patch_assignment (tree, tree); ! static tree patch_binop (tree, tree, tree); static tree build_unaryop (int, int, tree); static tree build_incdec (int, int, tree, int); static tree patch_unaryop (tree, tree); --- 403,409 ---- static tree build_assignment (int, int, tree, tree); static tree build_binop (enum tree_code, int, tree, tree); static tree patch_assignment (tree, tree); ! static tree patch_binop (tree, tree, tree, int); static tree build_unaryop (int, int, tree); static tree build_incdec (int, int, tree, int); static tree patch_unaryop (tree, tree); *************** static tree build_current_thisn (tree); *** 562,580 **** static tree build_access_to_thisn (tree, tree, int); static tree maybe_build_thisn_access_method (tree); ! static tree build_outer_field_access (tree, tree); ! static tree build_outer_field_access_methods (tree); ! static tree build_outer_field_access_expr (int, tree, tree, ! tree, tree); ! static tree build_outer_method_access_method (tree); static tree build_new_access_id (void); - static tree build_outer_field_access_method (tree, tree, tree, - tree, tree); ! static int outer_field_access_p (tree, tree); ! static int outer_field_expanded_access_p (tree, tree *, ! tree *, tree *); ! static tree outer_field_access_fix (tree, tree, tree); static tree build_incomplete_class_ref (int, tree); static tree patch_incomplete_class_ref (tree); static tree create_anonymous_class (tree); --- 562,578 ---- static tree build_access_to_thisn (tree, tree, int); static tree maybe_build_thisn_access_method (tree); ! static tree build_nested_field_access (tree, tree); ! static tree build_nested_field_access_methods (tree); ! static tree build_nested_field_access_method (tree, tree, tree, tree, tree); ! static tree build_nested_field_access_expr (int, tree, tree, tree, tree); ! static tree build_nested_method_access_method (tree); static tree build_new_access_id (void); ! static int nested_member_access_p (tree, tree); ! static int nested_field_expanded_access_p (tree, tree *, tree *, tree *); ! static tree nested_field_access_fix (tree, tree, tree); ! static tree build_incomplete_class_ref (int, tree); static tree patch_incomplete_class_ref (tree); static tree create_anonymous_class (tree); *************** static GTY(()) tree src_parse_roots[1]; *** 706,712 **** #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" typedef union YYSTYPE { tree node; int sub_token; --- 704,710 ---- #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" typedef union YYSTYPE { tree node; int sub_token; *************** typedef union YYSTYPE { *** 721,727 **** int value; } YYSTYPE; /* Line 190 of yacc.c. */ ! #line 725 "java/parse.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 --- 719,725 ---- int value; } YYSTYPE; /* Line 190 of yacc.c. */ ! #line 723 "java/parse.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 *************** typedef union YYSTYPE { *** 730,736 **** /* Copy the second part of user declarations. */ ! #line 468 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" #ifdef USE_MAPPED_LOCATION #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \ --- 728,734 ---- /* Copy the second part of user declarations. */ ! #line 466 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" #ifdef USE_MAPPED_LOCATION #define SET_EXPR_LOCATION_FROM_TOKEN(EXPR, TOKEN) \ *************** typedef union YYSTYPE { *** 744,750 **** /* Line 213 of yacc.c. */ ! #line 748 "java/parse.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE --- 742,748 ---- /* Line 213 of yacc.c. */ ! #line 746 "java/parse.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE *************** static const short int yyrhs[] = *** 1151,1208 **** /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { ! 0, 627, 627, 633, 634, 635, 636, 637, 638, 643, ! 644, 648, 649, 650, 654, 655, 659, 663, 667, 671, ! 679, 691, 692, 696, 700, 705, 710, 711, 712, 713, ! 714, 715, 716, 717, 721, 725, 732, 733, 737, 741, ! 743, 748, 749, 753, 779, 781, 786, 804, 806, 811, ! 813, 815, 816, 827, 831, 848, 847, 852, 851, 855, ! 857, 859, 864, 869, 870, 872, 874, 879, 880, 882, ! 890, 895, 900, 905, 912, 922, 923, 927, 928, 929, ! 930, 941, 942, 943, 945, 947, 952, 954, 966, 967, ! 969, 974, 976, 983, 989, 998, 999, 1001, 1003, 1008, ! 1013, 1014, 1020, 1019, 1030, 1035, 1037, 1039, 1041, 1043, ! 1048, 1053, 1058, 1063, 1071, 1076, 1078, 1087, 1089, 1094, ! 1098, 1103, 1108, 1112, 1117, 1122, 1130, 1140, 1141, 1143, ! 1148, 1150, 1152, 1157, 1158, 1163, 1172, 1189, 1188, 1198, ! 1200, 1205, 1210, 1218, 1223, 1225, 1227, 1232, 1237, 1243, ! 1251, 1253, 1258, 1264, 1276, 1275, 1280, 1279, 1284, 1283, ! 1288, 1287, 1291, 1293, 1298, 1303, 1308, 1310, 1315, 1317, ! 1322, 1323, 1327, 1328, 1329, 1331, 1336, 1340, 1345, 1351, ! 1353, 1355, 1357, 1362, 1367, 1371, 1377, 1379, 1384, 1389, ! 1402, 1403, 1407, 1408, 1410, 1418, 1422, 1424, 1429, 1430, ! 1431, 1432, 1433, 1434, 1439, 1440, 1441, 1442, 1443, 1448, ! 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, ! 1459, 1463, 1485, 1496, 1498, 1503, 1510, 1523, 1528, 1533, ! 1538, 1540, 1545, 1547, 1552, 1554, 1556, 1558, 1560, 1565, ! 1566, 1567, 1568, 1569, 1570, 1571, 1575, 1580, 1582, 1584, ! 1589, 1594, 1600, 1599, 1615, 1621, 1623, 1625, 1633, 1635, ! 1637, 1639, 1644, 1645, 1649, 1653, 1654, 1658, 1664, 1670, ! 1672, 1674, 1679, 1687, 1689, 1691, 1693, 1698, 1703, 1712, ! 1717, 1723, 1730, 1732, 1734, 1739, 1741, 1751, 1757, 1759, ! 1764, 1777, 1778, 1784, 1790, 1795, 1796, 1801, 1803, 1805, ! 1810, 1812, 1814, 1816, 1821, 1823, 1825, 1827, 1832, 1834, ! 1836, 1838, 1843, 1848, 1850, 1855, 1859, 1863, 1865, 1870, ! 1876, 1878, 1880, 1882, 1887, 1899, 1901, 1903, 1908, 1913, ! 1914, 1922, 1931, 1956, 1958, 1963, 1968, 1970, 1976, 1977, ! 1978, 1982, 1983, 1985, 1987, 1988, 1989, 1990, 1991, 1995, ! 2000, 2002, 2004, 2006, 2011, 2013, 2015, 2017, 2025, 2027, ! 2029, 2033, 2039, 2040, 2046, 2047, 2049, 2051, 2053, 2055, ! 2062, 2073, 2072, 2106, 2105, 2123, 2125, 2130, 2135, 2140, ! 2145, 2147, 2149, 2151, 2153, 2155, 2162, 2173, 2182, 2184, ! 2189, 2191, 2196, 2206, 2208, 2217, 2243, 2245, 2250, 2254, ! 2260, 2265, 2267, 2269, 2280, 2291, 2296, 2305, 2307, 2312, ! 2314, 2316, 2318, 2323, 2328, 2333, 2338, 2343, 2351, 2352, ! 2353, 2354, 2358, 2363, 2368, 2369, 2370, 2372, 2373, 2378, ! 2384, 2386, 2391, 2393, 2398, 2400, 2405, 2406, 2408, 2410, ! 2411, 2413, 2418, 2426, 2428, 2430, 2444, 2446, 2451, 2453, ! 2455, 2460, 2461, 2466, 2471, 2476, 2478, 2480, 2485, 2486, ! 2491, 2496, 2498, 2503, 2504, 2509, 2514, 2519, 2521, 2523, ! 2528, 2529, 2534, 2539, 2544, 2549, 2551, 2553, 2555, 2557, ! 2559, 2564, 2565, 2570, 2575, 2577, 2582, 2583, 2588, 2593, ! 2594, 2599, 2604, 2605, 2610, 2615, 2616, 2621, 2626, 2627, ! 2632, 2637, 2638, 2643, 2649, 2651, 2656, 2657, 2661, 2663, ! 2671, 2672, 2673, 2677, 2678, 2682, 2686 }; #endif --- 1149,1206 ---- /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { ! 0, 625, 625, 631, 632, 633, 634, 635, 636, 641, ! 642, 646, 647, 648, 652, 653, 657, 661, 665, 669, ! 677, 689, 690, 694, 698, 703, 708, 709, 710, 711, ! 712, 713, 714, 715, 719, 723, 730, 731, 735, 739, ! 741, 746, 747, 751, 777, 779, 784, 802, 804, 809, ! 811, 813, 814, 825, 829, 846, 845, 850, 849, 853, ! 855, 857, 862, 867, 868, 870, 872, 877, 878, 880, ! 888, 893, 898, 903, 910, 920, 921, 925, 926, 927, ! 928, 939, 940, 941, 943, 945, 950, 952, 964, 965, ! 967, 972, 974, 981, 987, 996, 997, 999, 1001, 1006, ! 1011, 1012, 1018, 1017, 1028, 1033, 1035, 1037, 1039, 1041, ! 1046, 1051, 1056, 1061, 1069, 1074, 1076, 1085, 1087, 1092, ! 1096, 1101, 1106, 1110, 1115, 1120, 1128, 1138, 1139, 1141, ! 1146, 1148, 1150, 1155, 1156, 1161, 1170, 1187, 1186, 1196, ! 1198, 1203, 1208, 1216, 1221, 1223, 1225, 1230, 1235, 1241, ! 1249, 1251, 1256, 1262, 1274, 1273, 1278, 1277, 1282, 1281, ! 1286, 1285, 1289, 1291, 1296, 1301, 1306, 1308, 1313, 1315, ! 1320, 1321, 1325, 1326, 1327, 1329, 1334, 1338, 1343, 1349, ! 1351, 1353, 1355, 1360, 1365, 1369, 1375, 1377, 1382, 1387, ! 1400, 1401, 1405, 1406, 1408, 1416, 1420, 1422, 1427, 1428, ! 1429, 1430, 1431, 1432, 1437, 1438, 1439, 1440, 1441, 1446, ! 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, ! 1457, 1461, 1483, 1494, 1496, 1501, 1508, 1521, 1526, 1531, ! 1536, 1538, 1543, 1545, 1550, 1552, 1554, 1556, 1558, 1563, ! 1564, 1565, 1566, 1567, 1568, 1569, 1573, 1578, 1580, 1582, ! 1587, 1592, 1598, 1597, 1613, 1619, 1621, 1623, 1631, 1633, ! 1635, 1637, 1642, 1643, 1647, 1651, 1652, 1656, 1662, 1668, ! 1670, 1672, 1677, 1685, 1687, 1689, 1691, 1696, 1701, 1710, ! 1715, 1721, 1728, 1730, 1732, 1737, 1739, 1749, 1755, 1757, ! 1762, 1775, 1776, 1782, 1788, 1793, 1794, 1799, 1801, 1803, ! 1808, 1810, 1812, 1814, 1819, 1821, 1823, 1825, 1830, 1832, ! 1834, 1836, 1841, 1846, 1848, 1853, 1857, 1861, 1863, 1868, ! 1874, 1876, 1878, 1880, 1885, 1897, 1899, 1901, 1906, 1911, ! 1912, 1920, 1929, 1954, 1956, 1961, 1966, 1968, 1974, 1975, ! 1976, 1980, 1981, 1983, 1985, 1986, 1987, 1988, 1989, 1993, ! 1998, 2000, 2002, 2004, 2009, 2011, 2013, 2015, 2023, 2025, ! 2027, 2031, 2037, 2038, 2044, 2045, 2047, 2049, 2051, 2053, ! 2060, 2071, 2070, 2104, 2103, 2121, 2123, 2128, 2133, 2138, ! 2143, 2145, 2147, 2149, 2151, 2153, 2160, 2171, 2180, 2182, ! 2187, 2189, 2194, 2204, 2206, 2215, 2241, 2243, 2248, 2252, ! 2258, 2263, 2265, 2267, 2278, 2289, 2294, 2303, 2305, 2310, ! 2312, 2314, 2316, 2321, 2326, 2331, 2336, 2341, 2349, 2350, ! 2351, 2352, 2356, 2361, 2366, 2367, 2368, 2370, 2371, 2376, ! 2382, 2384, 2389, 2391, 2396, 2398, 2403, 2404, 2406, 2408, ! 2409, 2411, 2416, 2424, 2426, 2428, 2442, 2444, 2449, 2451, ! 2453, 2458, 2459, 2464, 2469, 2474, 2476, 2478, 2483, 2484, ! 2489, 2494, 2496, 2501, 2502, 2507, 2512, 2517, 2519, 2521, ! 2526, 2527, 2532, 2537, 2542, 2547, 2549, 2551, 2553, 2555, ! 2557, 2562, 2563, 2568, 2573, 2575, 2580, 2581, 2586, 2591, ! 2592, 2597, 2602, 2603, 2608, 2613, 2614, 2619, 2624, 2625, ! 2630, 2635, 2636, 2641, 2647, 2649, 2654, 2655, 2659, 2661, ! 2669, 2670, 2671, 2675, 2676, 2680, 2684 }; #endif *************** yyreduce: *** 3519,3530 **** switch (yyn) { case 2: ! #line 628 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {;} break; case 19: ! #line 672 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree t = build_java_array_type (((yyvsp[-1].node)), -1); --- 3517,3528 ---- switch (yyn) { case 2: ! #line 626 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {;} break; case 19: ! #line 670 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree t = build_java_array_type (((yyvsp[-1].node)), -1); *************** yyreduce: *** 3535,3541 **** break; case 20: ! #line 680 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree t = (yyvsp[-1].node); --- 3533,3539 ---- break; case 20: ! #line 678 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree t = (yyvsp[-1].node); *************** yyreduce: *** 3546,3593 **** break; case 24: ! #line 701 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = make_qualified_name ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;} break; case 26: ! #line 710 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL;;} break; case 34: ! #line 722 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 35: ! #line 726 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 38: ! #line 738 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->package = EXPR_WFL_NODE ((yyvsp[-1].node)); ;} break; case 39: ! #line 742 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing name"); RECOVER;;} break; case 40: ! #line 744 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 43: ! #line 754 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree name = EXPR_WFL_NODE ((yyvsp[-1].node)), last_name; int i = IDENTIFIER_LENGTH (name)-1; --- 3544,3591 ---- break; case 24: ! #line 699 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = make_qualified_name ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;} break; case 26: ! #line 708 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL;;} break; case 34: ! #line 720 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 35: ! #line 724 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 38: ! #line 736 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->package = EXPR_WFL_NODE ((yyvsp[-1].node)); ;} break; case 39: ! #line 740 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing name"); RECOVER;;} break; case 40: ! #line 742 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 43: ! #line 752 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree name = EXPR_WFL_NODE ((yyvsp[-1].node)), last_name; int i = IDENTIFIER_LENGTH (name)-1; *************** yyreduce: *** 3616,3632 **** break; case 44: ! #line 780 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing name"); RECOVER;;} break; case 45: ! #line 782 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 46: ! #line 787 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree name = EXPR_WFL_NODE ((yyvsp[-3].node)); tree it; --- 3614,3630 ---- break; case 44: ! #line 778 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing name"); RECOVER;;} break; case 45: ! #line 780 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 46: ! #line 785 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree name = EXPR_WFL_NODE ((yyvsp[-3].node)); tree it; *************** yyreduce: *** 3647,3673 **** break; case 47: ! #line 805 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'*' expected"); RECOVER;;} break; case 48: ! #line 807 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 49: ! #line 812 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (0); ;} break; case 50: ! #line 814 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (0); ;} break; case 52: ! #line 817 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYERROR_NOW; yyerror ("Class or interface declaration expected"); --- 3645,3671 ---- break; case 47: ! #line 803 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'*' expected"); RECOVER;;} break; case 48: ! #line 805 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 49: ! #line 810 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (0); ;} break; case 50: ! #line 812 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (0); ;} break; case 52: ! #line 815 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYERROR_NOW; yyerror ("Class or interface declaration expected"); *************** yyreduce: *** 3675,3688 **** break; case 53: ! #line 828 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.value) = (1 << (yyvsp[0].value)); ;} break; case 54: ! #line 832 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { int acc = (1 << (yyvsp[0].value)); if ((yyval.value) & acc) --- 3673,3686 ---- break; case 53: ! #line 826 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.value) = (1 << (yyvsp[0].value)); ;} break; case 54: ! #line 830 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { int acc = (1 << (yyvsp[0].value)); if ((yyval.value) & acc) *************** yyreduce: *** 3697,3733 **** break; case 55: ! #line 848 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_class ((yyvsp[-4].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 56: ! #line 850 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {;;} break; case 57: ! #line 852 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_class (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 58: ! #line 854 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {;;} break; case 59: ! #line 856 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing class name"); RECOVER; ;} break; case 60: ! #line 858 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing class name"); RECOVER; ;} break; case 61: ! #line 860 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (!ctxp->class_err) yyerror ("'{' expected"); DRECOVER(class1); --- 3695,3731 ---- break; case 55: ! #line 846 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_class ((yyvsp[-4].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 56: ! #line 848 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {;;} break; case 57: ! #line 850 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_class (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 58: ! #line 852 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {;;} break; case 59: ! #line 854 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing class name"); RECOVER; ;} break; case 60: ! #line 856 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing class name"); RECOVER; ;} break; case 61: ! #line 858 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (!ctxp->class_err) yyerror ("'{' expected"); DRECOVER(class1); *************** yyreduce: *** 3735,3776 **** break; case 62: ! #line 865 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;} break; case 63: ! #line 869 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 64: ! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 65: ! #line 873 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'{' expected"); ctxp->class_err=1;;} break; case 66: ! #line 875 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing super class name"); ctxp->class_err=1;;} break; case 67: ! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 68: ! #line 881 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 69: ! #line 883 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->class_err=1; yyerror ("Missing interface name"); --- 3733,3774 ---- break; case 62: ! #line 863 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (!ctxp->class_err) yyerror ("'{' expected"); RECOVER; ;} break; case 63: ! #line 867 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL; ;} break; case 64: ! #line 869 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 65: ! #line 871 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'{' expected"); ctxp->class_err=1;;} break; case 66: ! #line 873 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing super class name"); ctxp->class_err=1;;} break; case 67: ! #line 877 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 68: ! #line 879 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 69: ! #line 881 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->class_err=1; yyerror ("Missing interface name"); *************** yyreduce: *** 3778,3784 **** break; case 70: ! #line 891 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->interface_number = 1; (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); --- 3776,3782 ---- break; case 70: ! #line 889 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->interface_number = 1; (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); *************** yyreduce: *** 3786,3792 **** break; case 71: ! #line 896 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->interface_number++; (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE)); --- 3784,3790 ---- break; case 71: ! #line 894 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->interface_number++; (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE)); *************** yyreduce: *** 3794,3805 **** break; case 72: ! #line 901 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing interface name"); RECOVER;;} break; case 73: ! #line 906 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* Store the location of the `}' when doing xrefs */ if (flag_emit_xref) --- 3792,3803 ---- break; case 72: ! #line 899 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing interface name"); RECOVER;;} break; case 73: ! #line 904 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* Store the location of the `}' when doing xrefs */ if (flag_emit_xref) *************** yyreduce: *** 3809,3815 **** break; case 74: ! #line 913 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* Store the location of the `}' when doing xrefs */ if (flag_emit_xref) --- 3807,3813 ---- break; case 74: ! #line 911 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* Store the location of the `}' when doing xrefs */ if (flag_emit_xref) *************** yyreduce: *** 3819,3825 **** break; case 80: ! #line 931 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (!IS_EMPTY_STMT ((yyvsp[0].node))) { --- 3817,3823 ---- break; case 80: ! #line 929 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (!IS_EMPTY_STMT ((yyvsp[0].node))) { *************** yyreduce: *** 3830,3851 **** break; case 83: ! #line 944 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 84: ! #line 946 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 86: ! #line 953 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { register_fields (0, (yyvsp[-2].node), (yyvsp[-1].node)); ;} break; case 87: ! #line 955 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs for field declaration", --- 3828,3849 ---- break; case 83: ! #line 942 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 84: ! #line 944 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 86: ! #line 951 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { register_fields (0, (yyvsp[-2].node), (yyvsp[-1].node)); ;} break; case 87: ! #line 953 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs for field declaration", *************** yyreduce: *** 3856,3877 **** break; case 89: ! #line 968 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 90: ! #line 970 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 91: ! #line 975 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); ;} break; case 92: ! #line 977 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (java_error_count) (yyvsp[0].node) = NULL_TREE; --- 3854,3875 ---- break; case 89: ! #line 966 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 90: ! #line 968 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 91: ! #line 973 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); ;} break; case 92: ! #line 975 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (java_error_count) (yyvsp[0].node) = NULL_TREE; *************** yyreduce: *** 3881,3887 **** break; case 93: ! #line 984 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing variable initializer"); (yyval.node) = build_tree_list ((yyvsp[-2].node), NULL_TREE); --- 3879,3885 ---- break; case 93: ! #line 982 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing variable initializer"); (yyval.node) = build_tree_list ((yyvsp[-2].node), NULL_TREE); *************** yyreduce: *** 3890,3896 **** break; case 94: ! #line 990 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("';' expected"); (yyval.node) = build_tree_list ((yyvsp[-3].node), NULL_TREE); --- 3888,3894 ---- break; case 94: ! #line 988 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("';' expected"); (yyval.node) = build_tree_list ((yyvsp[-3].node), NULL_TREE); *************** yyreduce: *** 3899,3915 **** break; case 96: ! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_unresolved_array_type ((yyvsp[-2].node)); ;} break; case 97: ! #line 1002 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid declaration"); DRECOVER(vdi);;} break; case 98: ! #line 1004 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(vdi); --- 3897,3913 ---- break; case 96: ! #line 998 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_unresolved_array_type ((yyvsp[-2].node)); ;} break; case 97: ! #line 1000 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid declaration"); DRECOVER(vdi);;} break; case 98: ! #line 1002 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(vdi); *************** yyreduce: *** 3917,3928 **** break; case 99: ! #line 1009 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;} break; case 102: ! #line 1020 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { current_function_decl = (yyvsp[0].node); if (current_function_decl --- 3915,3926 ---- break; case 99: ! #line 1007 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Unbalanced ']'"); DRECOVER(vdi);;} break; case 102: ! #line 1018 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { current_function_decl = (yyvsp[0].node); if (current_function_decl *************** yyreduce: *** 3934,3970 **** break; case 103: ! #line 1029 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { finish_method_declaration ((yyvsp[0].node)); ;} break; case 104: ! #line 1031 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;} break; case 105: ! #line 1036 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 106: ! #line 1038 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header (0, void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 107: ! #line 1040 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 108: ! #line 1042 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-3].value), void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 109: ! #line 1044 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Invalid method declaration, method name required"); RECOVER; --- 3932,3968 ---- break; case 103: ! #line 1027 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { finish_method_declaration ((yyvsp[0].node)); ;} break; case 104: ! #line 1029 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;} break; case 105: ! #line 1034 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header (0, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 106: ! #line 1036 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header (0, void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 107: ! #line 1038 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-3].value), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 108: ! #line 1040 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-3].value), void_type_node, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 109: ! #line 1042 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Invalid method declaration, method name required"); RECOVER; *************** yyreduce: *** 3972,3978 **** break; case 110: ! #line 1049 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; --- 3970,3976 ---- break; case 110: ! #line 1047 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; *************** yyreduce: *** 3980,3986 **** break; case 111: ! #line 1054 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; --- 3978,3984 ---- break; case 111: ! #line 1052 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; *************** yyreduce: *** 3988,3994 **** break; case 112: ! #line 1059 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; --- 3986,3992 ---- break; case 112: ! #line 1057 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Identifier expected"); RECOVER; *************** yyreduce: *** 3996,4002 **** break; case 113: ! #line 1064 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Invalid method declaration, return type required"); RECOVER; --- 3994,4000 ---- break; case 113: ! #line 1062 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Invalid method declaration, return type required"); RECOVER; *************** yyreduce: *** 4004,4010 **** break; case 114: ! #line 1072 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->formal_parameter_number = 0; (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE); --- 4002,4008 ---- break; case 114: ! #line 1070 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->formal_parameter_number = 0; (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE); *************** yyreduce: *** 4012,4023 **** break; case 115: ! #line 1077 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 116: ! #line 1079 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, (yyvsp[-1].operator)); TREE_PURPOSE ((yyvsp[-2].node)) = --- 4010,4021 ---- break; case 115: ! #line 1075 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 116: ! #line 1077 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { SET_EXPR_LOCATION_FROM_TOKEN (wfl_operator, (yyvsp[-1].operator)); TREE_PURPOSE ((yyvsp[-2].node)) = *************** yyreduce: *** 4029,4052 **** break; case 117: ! #line 1088 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); DRECOVER(method_declarator);;} break; case 118: ! #line 1090 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 119: ! #line 1095 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->formal_parameter_number = 1; ;} break; case 120: ! #line 1099 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->formal_parameter_number += 1; (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); --- 4027,4050 ---- break; case 117: ! #line 1086 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); DRECOVER(method_declarator);;} break; case 118: ! #line 1088 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 119: ! #line 1093 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->formal_parameter_number = 1; ;} break; case 120: ! #line 1097 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->formal_parameter_number += 1; (yyval.node) = chainon ((yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 4054,4072 **** break; case 121: ! #line 1104 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing formal parameter term"); RECOVER; ;} break; case 122: ! #line 1109 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node)); ;} break; case 123: ! #line 1113 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node)); ARG_FINAL_P ((yyval.node)) = 1; --- 4052,4070 ---- break; case 121: ! #line 1102 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing formal parameter term"); RECOVER; ;} break; case 122: ! #line 1107 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node)); ;} break; case 123: ! #line 1111 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[-1].node)); ARG_FINAL_P ((yyval.node)) = 1; *************** yyreduce: *** 4074,4080 **** break; case 124: ! #line 1118 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing identifier"); RECOVER; (yyval.node) = NULL_TREE; --- 4072,4078 ---- break; case 124: ! #line 1116 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing identifier"); RECOVER; (yyval.node) = NULL_TREE; *************** yyreduce: *** 4082,4088 **** break; case 125: ! #line 1123 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing identifier"); RECOVER; (yyval.node) = NULL_TREE; --- 4080,4086 ---- break; case 125: ! #line 1121 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing identifier"); RECOVER; (yyval.node) = NULL_TREE; *************** yyreduce: *** 4090,4096 **** break; case 126: ! #line 1131 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs. Only % was expected here", (yyvsp[0].value), ACC_FINAL); --- 4088,4094 ---- break; case 126: ! #line 1129 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs. Only % was expected here", (yyvsp[0].value), ACC_FINAL); *************** yyreduce: *** 4100,4141 **** break; case 127: ! #line 1140 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 128: ! #line 1142 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 129: ! #line 1144 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing class type term"); RECOVER;;} break; case 130: ! #line 1149 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[0].node)); ;} break; case 131: ! #line 1151 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = tree_cons ((yyvsp[0].node), (yyvsp[0].node), (yyvsp[-2].node)); ;} break; case 132: ! #line 1153 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing class type term"); RECOVER;;} break; case 134: ! #line 1158 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 135: ! #line 1164 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { TREE_CHAIN ((yyvsp[0].node)) = CPC_STATIC_INITIALIZER_STMT (ctxp); SET_CPC_STATIC_INITIALIZER_STMT (ctxp, (yyvsp[0].node)); --- 4098,4139 ---- break; case 127: ! #line 1138 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 128: ! #line 1140 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 129: ! #line 1142 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing class type term"); RECOVER;;} break; case 130: ! #line 1147 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_tree_list ((yyvsp[0].node), (yyvsp[0].node)); ;} break; case 131: ! #line 1149 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = tree_cons ((yyvsp[0].node), (yyvsp[0].node), (yyvsp[-2].node)); ;} break; case 132: ! #line 1151 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing class type term"); RECOVER;;} break; case 134: ! #line 1156 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 135: ! #line 1162 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { TREE_CHAIN ((yyvsp[0].node)) = CPC_STATIC_INITIALIZER_STMT (ctxp); SET_CPC_STATIC_INITIALIZER_STMT (ctxp, (yyvsp[0].node)); *************** yyreduce: *** 4144,4150 **** break; case 136: ! #line 1173 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs for static initializer", (yyvsp[0].value), ACC_STATIC); /* Can't have a static initializer in an innerclass */ --- 4142,4148 ---- break; case 136: ! #line 1171 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { check_modifiers ("Illegal modifier %qs for static initializer", (yyvsp[0].value), ACC_STATIC); /* Can't have a static initializer in an innerclass */ *************** yyreduce: *** 4159,4165 **** break; case 137: ! #line 1189 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { current_function_decl = (yyvsp[0].node); source_start_java_method (current_function_decl); --- 4157,4163 ---- break; case 137: ! #line 1187 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { current_function_decl = (yyvsp[0].node); source_start_java_method (current_function_decl); *************** yyreduce: *** 4167,4188 **** break; case 138: ! #line 1194 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { finish_method_declaration ((yyvsp[0].node)); ;} break; case 139: ! #line 1199 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header (0, NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 140: ! #line 1201 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-2].value), NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 141: ! #line 1206 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->formal_parameter_number = 0; (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE); --- 4165,4186 ---- break; case 138: ! #line 1192 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { finish_method_declaration ((yyvsp[0].node)); ;} break; case 139: ! #line 1197 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header (0, NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 140: ! #line 1199 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_header ((yyvsp[-2].value), NULL_TREE, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 141: ! #line 1204 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->formal_parameter_number = 0; (yyval.node) = method_declarator ((yyvsp[-2].node), NULL_TREE); *************** yyreduce: *** 4190,4201 **** break; case 142: ! #line 1211 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 143: ! #line 1219 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { BLOCK_EXPR_BODY ((yyvsp[0].node)) = build_java_empty_stmt (); (yyval.node) = (yyvsp[0].node); --- 4188,4199 ---- break; case 142: ! #line 1209 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = method_declarator ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 143: ! #line 1217 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { BLOCK_EXPR_BODY ((yyvsp[0].node)) = build_java_empty_stmt (); (yyval.node) = (yyvsp[0].node); *************** yyreduce: *** 4203,4224 **** break; case 144: ! #line 1224 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 145: ! #line 1226 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 146: ! #line 1228 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 148: ! #line 1238 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-3].node), NULL_TREE); (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-3].node)), (yyval.node)); --- 4201,4222 ---- break; case 144: ! #line 1222 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 145: ! #line 1224 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 146: ! #line 1226 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 148: ! #line 1236 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-3].node), NULL_TREE); (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-3].node)), (yyval.node)); *************** yyreduce: *** 4227,4233 **** break; case 149: ! #line 1244 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-4].node), (yyvsp[-2].node)); (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyval.node)); --- 4225,4231 ---- break; case 149: ! #line 1242 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-4].node), (yyvsp[-2].node)); (yyval.node) = build_debugable_stmt (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyval.node)); *************** yyreduce: *** 4236,4252 **** break; case 150: ! #line 1252 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;} break; case 151: ! #line 1254 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;} break; case 152: ! #line 1259 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree wfl = build_wfl_node (this_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator)); --- 4234,4250 ---- break; case 150: ! #line 1250 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;} break; case 151: ! #line 1252 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = parse_jdk1_1_error ("explicit constructor invocation"); ;} break; case 152: ! #line 1257 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree wfl = build_wfl_node (this_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator)); *************** yyreduce: *** 4255,4261 **** break; case 153: ! #line 1265 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree wfl = build_wfl_node (super_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator)); --- 4253,4259 ---- break; case 153: ! #line 1263 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree wfl = build_wfl_node (super_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (wfl, (yyvsp[0].operator)); *************** yyreduce: *** 4264,4320 **** break; case 154: ! #line 1276 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_interface (0, (yyvsp[0].node), NULL_TREE); ;} break; case 155: ! #line 1278 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ; ;} break; case 156: ! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_interface ((yyvsp[-2].value), (yyvsp[0].node), NULL_TREE); ;} break; case 157: ! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ; ;} break; case 158: ! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_interface (0, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 159: ! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ; ;} break; case 160: ! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_interface ((yyvsp[-3].value), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 161: ! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ; ;} break; case 162: ! #line 1292 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("'{' expected"); RECOVER; ;} break; case 163: ! #line 1294 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("'{' expected"); RECOVER; ;} break; case 164: ! #line 1299 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->interface_number = 1; (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); --- 4262,4318 ---- break; case 154: ! #line 1274 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_interface (0, (yyvsp[0].node), NULL_TREE); ;} break; case 155: ! #line 1276 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ; ;} break; case 156: ! #line 1278 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_interface ((yyvsp[-2].value), (yyvsp[0].node), NULL_TREE); ;} break; case 157: ! #line 1280 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ; ;} break; case 158: ! #line 1282 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_interface (0, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 159: ! #line 1284 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ; ;} break; case 160: ! #line 1286 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_interface ((yyvsp[-3].value), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 161: ! #line 1288 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ; ;} break; case 162: ! #line 1290 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("'{' expected"); RECOVER; ;} break; case 163: ! #line 1292 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("'{' expected"); RECOVER; ;} break; case 164: ! #line 1297 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->interface_number = 1; (yyval.node) = build_tree_list ((yyvsp[0].node), NULL_TREE); *************** yyreduce: *** 4322,4328 **** break; case 165: ! #line 1304 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->interface_number++; (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE)); --- 4320,4326 ---- break; case 165: ! #line 1302 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->interface_number++; (yyval.node) = chainon ((yyvsp[-2].node), build_tree_list ((yyvsp[0].node), NULL_TREE)); *************** yyreduce: *** 4330,4366 **** break; case 166: ! #line 1309 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid interface type"); RECOVER;;} break; case 167: ! #line 1311 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 168: ! #line 1316 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 169: ! #line 1318 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 174: ! #line 1330 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 175: ! #line 1332 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 177: ! #line 1341 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { check_abstract_method_header ((yyvsp[-1].node)); current_function_decl = NULL_TREE; /* FIXME ? */ --- 4328,4364 ---- break; case 166: ! #line 1307 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid interface type"); RECOVER;;} break; case 167: ! #line 1309 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 168: ! #line 1314 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 169: ! #line 1316 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 174: ! #line 1328 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 175: ! #line 1330 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { end_class_declaration (1); ;} break; case 177: ! #line 1339 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { check_abstract_method_header ((yyvsp[-1].node)); current_function_decl = NULL_TREE; /* FIXME ? */ *************** yyreduce: *** 4368,4399 **** break; case 178: ! #line 1346 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 179: ! #line 1352 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-1].operator).location, NULL_TREE); ;} break; case 180: ! #line 1354 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, NULL_TREE); ;} break; case 181: ! #line 1356 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;} break; case 182: ! #line 1358 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-3].operator).location, (yyvsp[-2].node)); ;} break; case 183: ! #line 1363 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), NULL_TREE); --- 4366,4397 ---- break; case 178: ! #line 1344 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 179: ! #line 1350 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-1].operator).location, NULL_TREE); ;} break; case 180: ! #line 1352 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, NULL_TREE); ;} break; case 181: ! #line 1354 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;} break; case 182: ! #line 1356 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_array_init ((yyvsp[-3].operator).location, (yyvsp[-2].node)); ;} break; case 183: ! #line 1361 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), NULL_TREE); *************** yyreduce: *** 4401,4434 **** break; case 184: ! #line 1368 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), (yyvsp[-2].node)); ;} break; case 185: ! #line 1372 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 186: ! #line 1378 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 187: ! #line 1380 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 188: ! #line 1385 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { enter_block (); ;} break; case 189: ! #line 1390 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { maybe_absorb_scoping_blocks (); /* Store the location of the `}' when doing xrefs */ --- 4399,4432 ---- break; case 184: ! #line 1366 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = tree_cons (maybe_build_array_element_wfl ((yyvsp[0].node)), (yyvsp[0].node), (yyvsp[-2].node)); ;} break; case 185: ! #line 1370 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 186: ! #line 1376 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 187: ! #line 1378 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 188: ! #line 1383 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { enter_block (); ;} break; case 189: ! #line 1388 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { maybe_absorb_scoping_blocks (); /* Store the location of the `}' when doing xrefs */ *************** yyreduce: *** 4441,4452 **** break; case 193: ! #line 1409 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); ;} break; case 194: ! #line 1411 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1; end_class_declaration (1); --- 4439,4450 ---- break; case 193: ! #line 1407 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); ;} break; case 194: ! #line 1409 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { LOCAL_CLASS_P (TREE_TYPE (GET_CPC ())) = 1; end_class_declaration (1); *************** yyreduce: *** 4454,4480 **** break; case 196: ! #line 1423 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { declare_local_variables (0, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 197: ! #line 1425 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { declare_local_variables ((yyvsp[-2].value), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 203: ! #line 1435 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = exit_block (); ;} break; case 208: ! #line 1444 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = exit_block (); ;} break; case 221: ! #line 1464 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (flag_extraneous_semicolon && ! current_static_block --- 4452,4478 ---- break; case 196: ! #line 1421 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { declare_local_variables (0, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 197: ! #line 1423 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { declare_local_variables ((yyvsp[-2].value), (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 203: ! #line 1433 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = exit_block (); ;} break; case 208: ! #line 1442 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = exit_block (); ;} break; case 221: ! #line 1462 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (flag_extraneous_semicolon && ! current_static_block *************** yyreduce: *** 4496,4502 **** break; case 222: ! #line 1486 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_labeled_block (EXPR_WFL_LINECOL ((yyvsp[-1].node)), EXPR_WFL_NODE ((yyvsp[-1].node))); --- 4494,4500 ---- break; case 222: ! #line 1484 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_labeled_block (EXPR_WFL_LINECOL ((yyvsp[-1].node)), EXPR_WFL_NODE ((yyvsp[-1].node))); *************** yyreduce: *** 4507,4528 **** break; case 223: ! #line 1497 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 224: ! #line 1499 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 225: ! #line 1504 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 226: ! #line 1511 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* We have a statement. Generate a WFL around it so we can debug it */ --- 4505,4526 ---- break; case 223: ! #line 1495 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 224: ! #line 1497 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 225: ! #line 1502 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_labeled_statement ((yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 226: ! #line 1509 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* We have a statement. Generate a WFL around it so we can debug it */ *************** yyreduce: *** 4538,4544 **** break; case 227: ! #line 1524 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); --- 4536,4542 ---- break; case 227: ! #line 1522 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); *************** yyreduce: *** 4546,4552 **** break; case 228: ! #line 1529 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); --- 4544,4550 ---- break; case 228: ! #line 1527 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); *************** yyreduce: *** 4554,4560 **** break; case 229: ! #line 1534 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); --- 4552,4558 ---- break; case 229: ! #line 1532 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid expression statement"); DRECOVER (expr_stmt); *************** yyreduce: *** 4562,4573 **** break; case 230: ! #line 1539 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 231: ! #line 1541 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { parse_ctor_invocation_error (); RECOVER; --- 4560,4571 ---- break; case 230: ! #line 1537 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 231: ! #line 1539 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { parse_ctor_invocation_error (); RECOVER; *************** yyreduce: *** 4575,4586 **** break; case 232: ! #line 1546 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 233: ! #line 1548 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { parse_ctor_invocation_error (); RECOVER; --- 4573,4584 ---- break; case 232: ! #line 1544 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 233: ! #line 1546 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { parse_ctor_invocation_error (); RECOVER; *************** yyreduce: *** 4588,4619 **** break; case 234: ! #line 1553 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 235: ! #line 1555 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 236: ! #line 1557 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 237: ! #line 1559 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 238: ! #line 1561 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 246: ! #line 1576 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node), NULL_TREE); --- 4586,4617 ---- break; case 234: ! #line 1551 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 235: ! #line 1553 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 236: ! #line 1555 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 237: ! #line 1557 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 238: ! #line 1559 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 246: ! #line 1574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node), NULL_TREE); *************** yyreduce: *** 4621,4659 **** break; case 247: ! #line 1581 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 248: ! #line 1583 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 249: ! #line 1585 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 250: ! #line 1590 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 251: ! #line 1595 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 252: ! #line 1600 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { enter_block (); ;} break; case 253: ! #line 1604 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* Make into "proper list" of COMPOUND_EXPRs. I.e. make the last statement also have its own --- 4619,4657 ---- break; case 247: ! #line 1579 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 248: ! #line 1581 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 249: ! #line 1583 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 250: ! #line 1588 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 251: ! #line 1593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_if_else_statement ((yyvsp[-5].operator).location, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 252: ! #line 1598 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { enter_block (); ;} break; case 253: ! #line 1602 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* Make into "proper list" of COMPOUND_EXPRs. I.e. make the last statement also have its own *************** yyreduce: *** 4665,4671 **** break; case 254: ! #line 1616 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build3 (SWITCH_EXPR, NULL_TREE, (yyvsp[-1].node), NULL_TREE, NULL_TREE); --- 4663,4669 ---- break; case 254: ! #line 1614 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build3 (SWITCH_EXPR, NULL_TREE, (yyvsp[-1].node), NULL_TREE, NULL_TREE); *************** yyreduce: *** 4674,4715 **** break; case 255: ! #line 1622 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 256: ! #line 1624 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;} break; case 257: ! #line 1626 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER;;} break; case 258: ! #line 1634 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 259: ! #line 1636 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 260: ! #line 1638 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 261: ! #line 1640 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 267: ! #line 1659 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree lab = build1 (CASE_EXPR, NULL_TREE, (yyvsp[-1].node)); SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-2].operator)); --- 4672,4713 ---- break; case 255: ! #line 1620 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 256: ! #line 1622 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;} break; case 257: ! #line 1624 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER;;} break; case 258: ! #line 1632 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 259: ! #line 1634 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 260: ! #line 1636 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 261: ! #line 1638 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; ;} break; case 267: ! #line 1657 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree lab = build1 (CASE_EXPR, NULL_TREE, (yyvsp[-1].node)); SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-2].operator)); *************** yyreduce: *** 4718,4724 **** break; case 268: ! #line 1665 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree lab = make_node (DEFAULT_EXPR); SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-1].operator)); --- 4716,4722 ---- break; case 268: ! #line 1663 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree lab = make_node (DEFAULT_EXPR); SET_EXPR_LOCATION_FROM_TOKEN (lab, (yyvsp[-1].operator)); *************** yyreduce: *** 4727,4748 **** break; case 269: ! #line 1671 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing or invalid constant expression"); RECOVER;;} break; case 270: ! #line 1673 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 271: ! #line 1675 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 272: ! #line 1680 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree body = build_loop_body ((yyvsp[-2].operator).location, (yyvsp[-1].node), 0); (yyval.node) = build_new_loop (body); --- 4725,4746 ---- break; case 269: ! #line 1669 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing or invalid constant expression"); RECOVER;;} break; case 270: ! #line 1671 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 271: ! #line 1673 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("':' expected"); RECOVER;;} break; case 272: ! #line 1678 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree body = build_loop_body ((yyvsp[-2].operator).location, (yyvsp[-1].node), 0); (yyval.node) = build_new_loop (body); *************** yyreduce: *** 4750,4781 **** break; case 273: ! #line 1688 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;} break; case 274: ! #line 1690 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;} break; case 275: ! #line 1692 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term and ')' expected"); RECOVER;;} break; case 276: ! #line 1694 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 277: ! #line 1699 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;} break; case 278: ! #line 1704 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree body = build_loop_body (0, NULL_TREE, 1); (yyval.node) = build_new_loop (body); --- 4748,4779 ---- break; case 273: ! #line 1686 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;} break; case 274: ! #line 1688 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;} break; case 275: ! #line 1690 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term and ')' expected"); RECOVER;;} break; case 276: ! #line 1692 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 277: ! #line 1697 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_loop_body (0, NULL_TREE, (yyvsp[0].node), 0); ;} break; case 278: ! #line 1702 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree body = build_loop_body (0, NULL_TREE, 1); (yyval.node) = build_new_loop (body); *************** yyreduce: *** 4783,4794 **** break; case 279: ! #line 1713 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_loop_body ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-5].node), 1); ;} break; case 280: ! #line 1718 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (CONSTANT_CLASS_P ((yyvsp[-4].node))) (yyvsp[-4].node) = build_wfl_node ((yyvsp[-4].node)); --- 4781,4792 ---- break; case 279: ! #line 1711 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_loop_body ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-5].node), 1); ;} break; case 280: ! #line 1716 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (CONSTANT_CLASS_P ((yyvsp[-4].node))) (yyvsp[-4].node) = build_wfl_node ((yyvsp[-4].node)); *************** yyreduce: *** 4797,4803 **** break; case 281: ! #line 1724 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); /* We have not condition, so we get rid of the EXIT_EXPR */ --- 4795,4801 ---- break; case 281: ! #line 1722 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); /* We have not condition, so we get rid of the EXIT_EXPR */ *************** yyreduce: *** 4807,4833 **** break; case 282: ! #line 1731 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid control expression"); RECOVER;;} break; case 283: ! #line 1733 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid update expression"); RECOVER;;} break; case 284: ! #line 1735 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid update expression"); RECOVER;;} break; case 285: ! #line 1740 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));;} break; case 286: ! #line 1742 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); /* We have not condition, so we get rid of the EXIT_EXPR */ --- 4805,4831 ---- break; case 282: ! #line 1729 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid control expression"); RECOVER;;} break; case 283: ! #line 1731 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid update expression"); RECOVER;;} break; case 284: ! #line 1733 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid update expression"); RECOVER;;} break; case 285: ! #line 1738 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_for_loop (EXPR_WFL_LINECOL ((yyvsp[-4].node)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node));;} break; case 286: ! #line 1740 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = finish_for_loop (0, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); /* We have not condition, so we get rid of the EXIT_EXPR */ *************** yyreduce: *** 4837,4843 **** break; case 287: ! #line 1752 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* This scope defined for local variable that may be defined within the scope of the for loop */ --- 4835,4841 ---- break; case 287: ! #line 1750 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* This scope defined for local variable that may be defined within the scope of the for loop */ *************** yyreduce: *** 4846,4862 **** break; case 288: ! #line 1758 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); DRECOVER(for_1);;} break; case 289: ! #line 1760 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid init statement"); RECOVER;;} break; case 290: ! #line 1765 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* We now declare the loop body. The loop is declared as a for loop. */ --- 4844,4860 ---- break; case 288: ! #line 1756 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); DRECOVER(for_1);;} break; case 289: ! #line 1758 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid init statement"); RECOVER;;} break; case 290: ! #line 1763 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* We now declare the loop body. The loop is declared as a for loop. */ *************** yyreduce: *** 4870,4881 **** break; case 291: ! #line 1777 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_java_empty_stmt (); ;} break; case 292: ! #line 1779 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* Init statement recorded within the previously defined block scope */ --- 4868,4879 ---- break; case 291: ! #line 1775 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_java_empty_stmt (); ;} break; case 292: ! #line 1777 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* Init statement recorded within the previously defined block scope */ *************** yyreduce: *** 4884,4890 **** break; case 293: ! #line 1785 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* Local variable are recorded within the previously defined block scope */ --- 4882,4888 ---- break; case 293: ! #line 1783 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* Local variable are recorded within the previously defined block scope */ *************** yyreduce: *** 4893,4989 **** break; case 294: ! #line 1791 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); DRECOVER(for_init_1);;} break; case 295: ! #line 1795 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_java_empty_stmt ();;} break; case 296: ! #line 1797 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_debugable_stmt (BUILD_LOCATION (), (yyvsp[0].node)); ;} break; case 297: ! #line 1802 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = add_stmt_to_compound (NULL_TREE, NULL_TREE, (yyvsp[0].node)); ;} break; case 298: ! #line 1804 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = add_stmt_to_compound ((yyvsp[-2].node), NULL_TREE, (yyvsp[0].node)); ;} break; case 299: ! #line 1806 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 300: ! #line 1811 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 1, NULL_TREE); ;} break; case 301: ! #line 1813 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 1, (yyvsp[-1].node)); ;} break; case 302: ! #line 1815 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 303: ! #line 1817 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 304: ! #line 1822 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 0, NULL_TREE); ;} break; case 305: ! #line 1824 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 0, (yyvsp[-1].node)); ;} break; case 306: ! #line 1826 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 307: ! #line 1828 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 308: ! #line 1833 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_return ((yyvsp[-1].operator).location, NULL_TREE); ;} break; case 309: ! #line 1835 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_return ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;} break; case 310: ! #line 1837 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 311: ! #line 1839 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 312: ! #line 1844 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build1 (THROW_EXPR, NULL_TREE, (yyvsp[-1].node)); SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator)); --- 4891,4987 ---- break; case 294: ! #line 1789 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); DRECOVER(for_init_1);;} break; case 295: ! #line 1793 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_java_empty_stmt ();;} break; case 296: ! #line 1795 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_debugable_stmt (BUILD_LOCATION (), (yyvsp[0].node)); ;} break; case 297: ! #line 1800 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = add_stmt_to_compound (NULL_TREE, NULL_TREE, (yyvsp[0].node)); ;} break; case 298: ! #line 1802 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = add_stmt_to_compound ((yyvsp[-2].node), NULL_TREE, (yyvsp[0].node)); ;} break; case 299: ! #line 1804 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 300: ! #line 1809 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 1, NULL_TREE); ;} break; case 301: ! #line 1811 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 1, (yyvsp[-1].node)); ;} break; case 302: ! #line 1813 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 303: ! #line 1815 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 304: ! #line 1820 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-1].operator).location, 0, NULL_TREE); ;} break; case 305: ! #line 1822 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_bc_statement ((yyvsp[-2].operator).location, 0, (yyvsp[-1].node)); ;} break; case 306: ! #line 1824 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 307: ! #line 1826 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 308: ! #line 1831 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_return ((yyvsp[-1].operator).location, NULL_TREE); ;} break; case 309: ! #line 1833 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_return ((yyvsp[-2].operator).location, (yyvsp[-1].node)); ;} break; case 310: ! #line 1835 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 311: ! #line 1837 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 312: ! #line 1842 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build1 (THROW_EXPR, NULL_TREE, (yyvsp[-1].node)); SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-2].operator)); *************** yyreduce: *** 4991,5031 **** break; case 313: ! #line 1849 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 314: ! #line 1851 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 315: ! #line 1856 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_assertion ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 316: ! #line 1860 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_assertion ((yyvsp[-2].operator).location, (yyvsp[-1].node), NULL_TREE); ;} break; case 317: ! #line 1864 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 318: ! #line 1866 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 319: ! #line 1871 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build2 (SYNCHRONIZED_EXPR, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); EXPR_WFL_LINECOL ((yyval.node)) = --- 4989,5029 ---- break; case 313: ! #line 1847 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 314: ! #line 1849 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 315: ! #line 1854 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_assertion ((yyvsp[-4].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 316: ! #line 1858 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_assertion ((yyvsp[-2].operator).location, (yyvsp[-1].node), NULL_TREE); ;} break; case 317: ! #line 1862 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 318: ! #line 1864 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("';' expected"); RECOVER;;} break; case 319: ! #line 1869 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build2 (SYNCHRONIZED_EXPR, NULL_TREE, (yyvsp[-2].node), (yyvsp[0].node)); EXPR_WFL_LINECOL ((yyval.node)) = *************** yyreduce: *** 5034,5060 **** break; case 320: ! #line 1877 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER;;} break; case 321: ! #line 1879 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 322: ! #line 1881 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 323: ! #line 1883 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 324: ! #line 1888 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { check_modifiers ( "Illegal modifier %qs. Only % was expected here", --- 5032,5058 ---- break; case 320: ! #line 1875 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER;;} break; case 321: ! #line 1877 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER;;} break; case 322: ! #line 1879 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 323: ! #line 1881 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 324: ! #line 1886 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { check_modifiers ( "Illegal modifier %qs. Only % was expected here", *************** yyreduce: *** 5066,5082 **** break; case 325: ! #line 1900 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_try_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 326: ! #line 1902 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_try_finally_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 327: ! #line 1904 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_try_finally_statement ((yyvsp[-3].operator).location, build_try_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-1].node)), (yyvsp[0].node)); --- 5064,5080 ---- break; case 325: ! #line 1898 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_try_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 326: ! #line 1900 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_try_finally_statement ((yyvsp[-2].operator).location, (yyvsp[-1].node), (yyvsp[0].node)); ;} break; case 327: ! #line 1902 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_try_finally_statement ((yyvsp[-3].operator).location, build_try_statement ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[-1].node)), (yyvsp[0].node)); *************** yyreduce: *** 5084,5095 **** break; case 328: ! #line 1909 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'{' expected"); DRECOVER (try_statement);;} break; case 330: ! #line 1915 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { TREE_CHAIN ((yyvsp[0].node)) = (yyvsp[-1].node); (yyval.node) = (yyvsp[0].node); --- 5082,5093 ---- break; case 328: ! #line 1907 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'{' expected"); DRECOVER (try_statement);;} break; case 330: ! #line 1913 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { TREE_CHAIN ((yyvsp[0].node)) = (yyvsp[-1].node); (yyval.node) = (yyvsp[0].node); *************** yyreduce: *** 5097,5103 **** break; case 331: ! #line 1923 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); exit_block (); --- 5095,5101 ---- break; case 331: ! #line 1921 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { java_method_add_stmt (current_function_decl, (yyvsp[0].node)); exit_block (); *************** yyreduce: *** 5106,5112 **** break; case 332: ! #line 1932 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { /* We add a block to define a scope for formal_parameter (CCBP). The formal parameter is --- 5104,5110 ---- break; case 332: ! #line 1930 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { /* We add a block to define a scope for formal_parameter (CCBP). The formal parameter is *************** yyreduce: *** 5134,5145 **** break; case 333: ! #line 1957 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER; (yyval.node) = NULL_TREE;;} break; case 334: ! #line 1959 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing term or ')' expected"); RECOVER; (yyval.node) = NULL_TREE; --- 5132,5143 ---- break; case 333: ! #line 1955 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'(' expected"); RECOVER; (yyval.node) = NULL_TREE;;} break; case 334: ! #line 1957 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing term or ')' expected"); RECOVER; (yyval.node) = NULL_TREE; *************** yyreduce: *** 5147,5178 **** break; case 335: ! #line 1964 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER; (yyval.node) = NULL_TREE;;} break; case 336: ! #line 1969 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 337: ! #line 1971 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER; ;} break; case 342: ! #line 1984 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_this ((yyvsp[0].operator).location); ;} break; case 343: ! #line 1986 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = (yyvsp[-1].node);;} break; case 349: ! #line 1996 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree wfl = build_wfl_node (this_identifier_node); (yyval.node) = make_qualified_primary ((yyvsp[-2].node), wfl, EXPR_WFL_LINECOL ((yyvsp[-2].node))); --- 5145,5176 ---- break; case 335: ! #line 1962 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER; (yyval.node) = NULL_TREE;;} break; case 336: ! #line 1967 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[0].node); ;} break; case 337: ! #line 1969 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'{' expected"); RECOVER; ;} break; case 342: ! #line 1982 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_this ((yyvsp[0].operator).location); ;} break; case 343: ! #line 1984 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = (yyvsp[-1].node);;} break; case 349: ! #line 1994 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree wfl = build_wfl_node (this_identifier_node); (yyval.node) = make_qualified_primary ((yyvsp[-2].node), wfl, EXPR_WFL_LINECOL ((yyvsp[-2].node))); *************** yyreduce: *** 5180,5221 **** break; case 350: ! #line 2001 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 351: ! #line 2003 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'class' or 'this' expected" ); RECOVER;;} break; case 352: ! #line 2005 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'class' expected" ); RECOVER;;} break; case 353: ! #line 2007 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'class' expected" ); RECOVER;;} break; case 354: ! #line 2012 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 355: ! #line 2014 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 356: ! #line 2016 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 357: ! #line 2018 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, void_type_node); --- 5178,5219 ---- break; case 350: ! #line 1999 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("')' expected"); RECOVER;;} break; case 351: ! #line 2001 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'class' or 'this' expected" ); RECOVER;;} break; case 352: ! #line 2003 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'class' expected" ); RECOVER;;} break; case 353: ! #line 2005 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'class' expected" ); RECOVER;;} break; case 354: ! #line 2010 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 355: ! #line 2012 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 356: ! #line 2014 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, (yyvsp[-2].node)); ;} break; case 357: ! #line 2016 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incomplete_class_ref ((yyvsp[-1].operator).location, void_type_node); *************** yyreduce: *** 5223,5239 **** break; case 358: ! #line 2026 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 359: ! #line 2028 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_new_invocation ((yyvsp[-2].node), NULL_TREE); ;} break; case 361: ! #line 2034 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree ctor = build_new_invocation ((yyvsp[-2].node), NULL_TREE); (yyval.node) = make_qualified_primary ((yyvsp[-3].node), ctor, --- 5221,5237 ---- break; case 358: ! #line 2024 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 359: ! #line 2026 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_new_invocation ((yyvsp[-2].node), NULL_TREE); ;} break; case 361: ! #line 2032 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree ctor = build_new_invocation ((yyvsp[-2].node), NULL_TREE); (yyval.node) = make_qualified_primary ((yyvsp[-3].node), ctor, *************** yyreduce: *** 5242,5248 **** break; case 363: ! #line 2041 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree ctor = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); (yyval.node) = make_qualified_primary ((yyvsp[-4].node), ctor, --- 5240,5246 ---- break; case 363: ! #line 2039 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree ctor = build_new_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); (yyval.node) = make_qualified_primary ((yyvsp[-4].node), ctor, *************** yyreduce: *** 5251,5277 **** break; case 365: ! #line 2048 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;} break; case 366: ! #line 2050 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;} break; case 367: ! #line 2052 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;} break; case 368: ! #line 2054 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("')' expected"); RECOVER;;} break; case 369: ! #line 2056 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = NULL_TREE; YYERROR_NOW; --- 5249,5275 ---- break; case 365: ! #line 2046 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); DRECOVER(new_1);;} break; case 366: ! #line 2048 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;} break; case 367: ! #line 2050 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("')' or term expected"); RECOVER;;} break; case 368: ! #line 2052 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("')' expected"); RECOVER;;} break; case 369: ! #line 2054 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = NULL_TREE; YYERROR_NOW; *************** yyreduce: *** 5281,5297 **** break; case 370: ! #line 2063 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;} break; case 371: ! #line 2073 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_anonymous_class ((yyvsp[-3].node)); ;} break; case 372: ! #line 2075 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree id = build_wfl_node (DECL_NAME (GET_CPC ())); EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-5].node)); --- 5279,5295 ---- break; case 370: ! #line 2061 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = NULL_TREE; yyerror ("'(' expected"); RECOVER;;} break; case 371: ! #line 2071 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_anonymous_class ((yyvsp[-3].node)); ;} break; case 372: ! #line 2073 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree id = build_wfl_node (DECL_NAME (GET_CPC ())); EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-5].node)); *************** yyreduce: *** 5325,5336 **** break; case 373: ! #line 2106 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { create_anonymous_class ((yyvsp[-2].node)); ;} break; case 374: ! #line 2108 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree id = build_wfl_node (DECL_NAME (GET_CPC ())); EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-4].node)); --- 5323,5334 ---- break; case 373: ! #line 2104 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { create_anonymous_class ((yyvsp[-2].node)); ;} break; case 374: ! #line 2106 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree id = build_wfl_node (DECL_NAME (GET_CPC ())); EXPR_WFL_LINECOL (id) = EXPR_WFL_LINECOL ((yyvsp[-4].node)); *************** yyreduce: *** 5346,5362 **** break; case 375: ! #line 2124 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[-2].node); ;} break; case 376: ! #line 2126 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = (yyvsp[-2].node); ;} break; case 377: ! #line 2131 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), NULL_TREE); ctxp->formal_parameter_number = 1; --- 5344,5360 ---- break; case 375: ! #line 2122 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[-2].node); ;} break; case 376: ! #line 2124 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = (yyvsp[-2].node); ;} break; case 377: ! #line 2129 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), NULL_TREE); ctxp->formal_parameter_number = 1; *************** yyreduce: *** 5364,5370 **** break; case 378: ! #line 2136 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { ctxp->formal_parameter_number += 1; (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyvsp[-2].node)); --- 5362,5368 ---- break; case 378: ! #line 2134 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { ctxp->formal_parameter_number += 1; (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyvsp[-2].node)); *************** yyreduce: *** 5372,5413 **** break; case 379: ! #line 2141 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 380: ! #line 2146 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;} break; case 381: ! #line 2148 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;} break; case 382: ! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;} break; case 383: ! #line 2152 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;} break; case 384: ! #line 2154 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'[' expected"); DRECOVER ("]");;} break; case 385: ! #line 2156 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 386: ! #line 2163 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { char *sig; int osb = pop_current_osb (ctxp); --- 5370,5411 ---- break; case 379: ! #line 2139 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 380: ! #line 2144 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;} break; case 381: ! #line 2146 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-1].node), (yyvsp[0].node), 0); ;} break; case 382: ! #line 2148 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;} break; case 383: ! #line 2150 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_newarray_node ((yyvsp[-2].node), (yyvsp[-1].node), pop_current_osb (ctxp));;} break; case 384: ! #line 2152 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'[' expected"); DRECOVER ("]");;} break; case 385: ! #line 2154 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 386: ! #line 2161 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { char *sig; int osb = pop_current_osb (ctxp); *************** yyreduce: *** 5421,5427 **** break; case 387: ! #line 2174 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree type = (yyvsp[-2].node); --- 5419,5425 ---- break; case 387: ! #line 2172 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { int osb = pop_current_osb (ctxp); tree type = (yyvsp[-2].node); *************** yyreduce: *** 5433,5459 **** break; case 388: ! #line 2183 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("'[' expected"); DRECOVER ("]");;} break; case 389: ! #line 2185 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 390: ! #line 2190 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_tree_list (NULL_TREE, (yyvsp[0].node)); ;} break; case 391: ! #line 2192 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyval.node)); ;} break; case 392: ! #line 2197 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (JNUMERIC_TYPE_P (TREE_TYPE ((yyvsp[-1].node)))) { --- 5431,5457 ---- break; case 388: ! #line 2181 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("'[' expected"); DRECOVER ("]");;} break; case 389: ! #line 2183 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 390: ! #line 2188 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_tree_list (NULL_TREE, (yyvsp[0].node)); ;} break; case 391: ! #line 2190 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = tree_cons (NULL_TREE, (yyvsp[0].node), (yyval.node)); ;} break; case 392: ! #line 2195 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (JNUMERIC_TYPE_P (TREE_TYPE ((yyvsp[-1].node)))) { *************** yyreduce: *** 5466,5477 **** break; case 393: ! #line 2207 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 394: ! #line 2209 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing term"); yyerror ("']' expected"); --- 5464,5475 ---- break; case 393: ! #line 2205 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("']' expected"); RECOVER;;} break; case 394: ! #line 2207 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing term"); yyerror ("']' expected"); *************** yyreduce: *** 5480,5486 **** break; case 395: ! #line 2218 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { int allocate = 0; /* If not initialized, allocate memory for the osb --- 5478,5484 ---- break; case 395: ! #line 2216 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { int allocate = 0; /* If not initialized, allocate memory for the osb *************** yyreduce: *** 5509,5530 **** break; case 396: ! #line 2244 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { CURRENT_OSB (ctxp)++; ;} break; case 397: ! #line 2246 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("']' expected"); RECOVER;;} break; case 398: ! #line 2251 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = make_qualified_primary ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;} break; case 399: ! #line 2255 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree super_wfl = build_wfl_node (super_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, (yyvsp[-2].operator)); --- 5507,5528 ---- break; case 396: ! #line 2242 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { CURRENT_OSB (ctxp)++; ;} break; case 397: ! #line 2244 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("']' expected"); RECOVER;;} break; case 398: ! #line 2249 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = make_qualified_primary ((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].operator).location); ;} break; case 399: ! #line 2253 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree super_wfl = build_wfl_node (super_identifier_node); SET_EXPR_LOCATION_FROM_TOKEN (super_wfl, (yyvsp[-2].operator)); *************** yyreduce: *** 5533,5554 **** break; case 400: ! #line 2261 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Field expected"); DRECOVER (super_field_acces);;} break; case 401: ! #line 2266 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-2].node), NULL_TREE); ;} break; case 402: ! #line 2268 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 403: ! #line 2270 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (TREE_CODE ((yyvsp[-4].node)) == THIS_EXPR) (yyval.node) = build_this_super_qualified_invocation --- 5531,5552 ---- break; case 400: ! #line 2259 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Field expected"); DRECOVER (super_field_acces);;} break; case 401: ! #line 2264 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-2].node), NULL_TREE); ;} break; case 402: ! #line 2266 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_method_invocation ((yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 403: ! #line 2268 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (TREE_CODE ((yyvsp[-4].node)) == THIS_EXPR) (yyval.node) = build_this_super_qualified_invocation *************** yyreduce: *** 5562,5568 **** break; case 404: ! #line 2281 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if (TREE_CODE ((yyvsp[-5].node)) == THIS_EXPR) (yyval.node) = build_this_super_qualified_invocation --- 5560,5566 ---- break; case 404: ! #line 2279 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if (TREE_CODE ((yyvsp[-5].node)) == THIS_EXPR) (yyval.node) = build_this_super_qualified_invocation *************** yyreduce: *** 5576,5582 **** break; case 405: ! #line 2292 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_this_super_qualified_invocation (0, (yyvsp[-2].node), NULL_TREE, (yyvsp[-4].operator).location, (yyvsp[-3].operator).location); --- 5574,5580 ---- break; case 405: ! #line 2290 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_this_super_qualified_invocation (0, (yyvsp[-2].node), NULL_TREE, (yyvsp[-4].operator).location, (yyvsp[-3].operator).location); *************** yyreduce: *** 5584,5590 **** break; case 406: ! #line 2297 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_this_super_qualified_invocation (0, (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[-5].operator).location, (yyvsp[-4].operator).location); --- 5582,5588 ---- break; case 406: ! #line 2295 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_this_super_qualified_invocation (0, (yyvsp[-3].node), (yyvsp[-1].node), (yyvsp[-5].operator).location, (yyvsp[-4].operator).location); *************** yyreduce: *** 5592,5623 **** break; case 407: ! #line 2306 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ;} break; case 408: ! #line 2308 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ;} break; case 409: ! #line 2313 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 410: ! #line 2315 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 411: ! #line 2317 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 412: ! #line 2319 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); --- 5590,5621 ---- break; case 407: ! #line 2304 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ;} break; case 408: ! #line 2306 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("'(' expected"); DRECOVER (method_invocation); ;} break; case 409: ! #line 2311 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 410: ! #line 2313 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 411: ! #line 2315 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_array_ref ((yyvsp[-2].operator).location, (yyvsp[-3].node), (yyvsp[-1].node)); ;} break; case 412: ! #line 2317 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5625,5631 **** break; case 413: ! #line 2324 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); --- 5623,5629 ---- break; case 413: ! #line 2322 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5633,5639 **** break; case 414: ! #line 2329 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); --- 5631,5637 ---- break; case 414: ! #line 2327 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5641,5647 **** break; case 415: ! #line 2334 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); --- 5639,5645 ---- break; case 415: ! #line 2332 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5649,5655 **** break; case 416: ! #line 2339 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); --- 5647,5653 ---- break; case 416: ! #line 2337 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("Missing term and ']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5657,5663 **** break; case 417: ! #line 2344 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); --- 5655,5661 ---- break; case 417: ! #line 2342 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { yyerror ("']' expected"); DRECOVER(array_access); *************** yyreduce: *** 5665,5691 **** break; case 422: ! #line 2359 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;} break; case 423: ! #line 2364 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;} break; case 426: ! #line 2371 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 428: ! #line 2374 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 429: ! #line 2379 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { if ((yyvsp[0].node)) error_if_numeric_overflow ((yyvsp[0].node)); --- 5663,5689 ---- break; case 422: ! #line 2357 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;} break; case 423: ! #line 2362 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_incdec ((yyvsp[0].operator).token, (yyvsp[0].operator).location, (yyvsp[-1].node), 1); ;} break; case 426: ! #line 2369 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 428: ! #line 2372 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 429: ! #line 2377 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { if ((yyvsp[0].node)) error_if_numeric_overflow ((yyvsp[0].node)); *************** yyreduce: *** 5694,5750 **** break; case 430: ! #line 2385 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 431: ! #line 2387 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 432: ! #line 2392 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;} break; case 433: ! #line 2394 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 434: ! #line 2399 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;} break; case 435: ! #line 2401 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 437: ! #line 2407 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 438: ! #line 2409 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 440: ! #line 2412 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 441: ! #line 2414 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 442: ! #line 2419 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { tree type = (yyvsp[-3].node); int osb = pop_current_osb (ctxp); --- 5692,5748 ---- break; case 430: ! #line 2383 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 431: ! #line 2385 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 432: ! #line 2390 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;} break; case 433: ! #line 2392 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 434: ! #line 2397 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_incdec ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node), 0); ;} break; case 435: ! #line 2399 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 437: ! #line 2405 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 438: ! #line 2407 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {(yyval.node) = build_unaryop ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[0].node)); ;} break; case 440: ! #line 2410 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 441: ! #line 2412 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;} break; case 442: ! #line 2417 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { tree type = (yyvsp[-3].node); int osb = pop_current_osb (ctxp); *************** yyreduce: *** 5755,5771 **** break; case 443: ! #line 2427 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 444: ! #line 2429 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 445: ! #line 2431 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { const char *ptr; int osb = pop_current_osb (ctxp); --- 5753,5769 ---- break; case 443: ! #line 2425 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 444: ! #line 2427 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_cast ((yyvsp[-3].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 445: ! #line 2429 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { const char *ptr; int osb = pop_current_osb (ctxp); *************** yyreduce: *** 5782,5793 **** break; case 446: ! #line 2445 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("']' expected, invalid type expression");;} break; case 447: ! #line 2447 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER; RECOVER; --- 5780,5791 ---- break; case 446: ! #line 2443 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("']' expected, invalid type expression");;} break; case 447: ! #line 2445 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Invalid type expression"); RECOVER; RECOVER; *************** yyreduce: *** 5795,5816 **** break; case 448: ! #line 2452 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 449: ! #line 2454 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 450: ! #line 2456 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 452: ! #line 2462 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5793,5814 ---- break; case 448: ! #line 2450 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 449: ! #line 2452 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 450: ! #line 2454 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 452: ! #line 2460 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5818,5824 **** break; case 453: ! #line 2467 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5816,5822 ---- break; case 453: ! #line 2465 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5826,5832 **** break; case 454: ! #line 2472 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5824,5830 ---- break; case 454: ! #line 2470 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5834,5855 **** break; case 455: ! #line 2477 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 456: ! #line 2479 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 457: ! #line 2481 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 459: ! #line 2487 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5832,5853 ---- break; case 455: ! #line 2475 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 456: ! #line 2477 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 457: ! #line 2479 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 459: ! #line 2485 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5857,5863 **** break; case 460: ! #line 2492 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5855,5861 ---- break; case 460: ! #line 2490 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5865,5881 **** break; case 461: ! #line 2497 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 462: ! #line 2499 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 464: ! #line 2505 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5863,5879 ---- break; case 461: ! #line 2495 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 462: ! #line 2497 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 464: ! #line 2503 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5883,5889 **** break; case 465: ! #line 2510 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5881,5887 ---- break; case 465: ! #line 2508 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5891,5897 **** break; case 466: ! #line 2515 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5889,5895 ---- break; case 466: ! #line 2513 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5899,5920 **** break; case 467: ! #line 2520 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 468: ! #line 2522 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 469: ! #line 2524 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 471: ! #line 2530 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5897,5918 ---- break; case 467: ! #line 2518 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 468: ! #line 2520 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 469: ! #line 2522 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 471: ! #line 2528 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5922,5928 **** break; case 472: ! #line 2535 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5920,5926 ---- break; case 472: ! #line 2533 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5930,5936 **** break; case 473: ! #line 2540 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5928,5934 ---- break; case 473: ! #line 2538 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5938,5944 **** break; case 474: ! #line 2545 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5936,5942 ---- break; case 474: ! #line 2543 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5946,5982 **** break; case 475: ! #line 2550 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (INSTANCEOF_EXPR, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 476: ! #line 2552 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 477: ! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 478: ! #line 2556 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 479: ! #line 2558 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 480: ! #line 2560 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Invalid reference type"); RECOVER;;} break; case 482: ! #line 2566 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5944,5980 ---- break; case 475: ! #line 2548 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (INSTANCEOF_EXPR, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 476: ! #line 2550 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 477: ! #line 2552 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 478: ! #line 2554 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 479: ! #line 2556 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 480: ! #line 2558 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Invalid reference type"); RECOVER;;} break; case 482: ! #line 2564 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5984,5990 **** break; case 483: ! #line 2571 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5982,5988 ---- break; case 483: ! #line 2569 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 5992,6008 **** break; case 484: ! #line 2576 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 485: ! #line 2578 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 487: ! #line 2584 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 5990,6006 ---- break; case 484: ! #line 2574 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 485: ! #line 2576 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 487: ! #line 2582 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 6010,6021 **** break; case 488: ! #line 2589 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 490: ! #line 2595 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 6008,6019 ---- break; case 488: ! #line 2587 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 490: ! #line 2593 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 6023,6034 **** break; case 491: ! #line 2600 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 493: ! #line 2606 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 6021,6032 ---- break; case 491: ! #line 2598 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 493: ! #line 2604 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 6036,6047 **** break; case 494: ! #line 2611 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 496: ! #line 2617 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 6034,6045 ---- break; case 494: ! #line 2609 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 496: ! #line 2615 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 6049,6060 **** break; case 497: ! #line 2622 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 499: ! #line 2628 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); --- 6047,6058 ---- break; case 497: ! #line 2620 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 499: ! #line 2626 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_binop (BINOP_LOOKUP ((yyvsp[-1].operator).token), (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); *************** yyreduce: *** 6062,6073 **** break; case 500: ! #line 2633 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 502: ! #line 2639 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build3 (CONDITIONAL_EXPR, NULL_TREE, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator)); --- 6060,6071 ---- break; case 500: ! #line 2631 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); RECOVER;;} break; case 502: ! #line 2637 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build3 (CONDITIONAL_EXPR, NULL_TREE, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); SET_EXPR_LOCATION_FROM_TOKEN ((yyval.node), (yyvsp[-3].operator)); *************** yyreduce: *** 6075,6081 **** break; case 503: ! #line 2644 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYERROR_NOW; yyerror ("Missing term"); --- 6073,6079 ---- break; case 503: ! #line 2642 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYERROR_NOW; yyerror ("Missing term"); *************** yyreduce: *** 6084,6105 **** break; case 504: ! #line 2650 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); DRECOVER (2);;} break; case 505: ! #line 2652 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" {yyerror ("Missing term"); DRECOVER (3);;} break; case 508: ! #line 2662 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { (yyval.node) = build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 509: ! #line 2664 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Missing term"); DRECOVER (assign); --- 6082,6103 ---- break; case 504: ! #line 2648 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); DRECOVER (2);;} break; case 505: ! #line 2650 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" {yyerror ("Missing term"); DRECOVER (3);;} break; case 508: ! #line 2660 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { (yyval.node) = build_assignment ((yyvsp[-1].operator).token, (yyvsp[-1].operator).location, (yyvsp[-2].node), (yyvsp[0].node)); ;} break; case 509: ! #line 2662 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" { YYNOT_TWICE yyerror ("Missing term"); DRECOVER (assign); *************** yyreduce: *** 6110,6116 **** } /* Line 1037 of yacc.c. */ ! #line 6114 "java/parse.c" yyvsp -= yylen; yyssp -= yylen; --- 6108,6114 ---- } /* Line 1037 of yacc.c. */ ! #line 6112 "java/parse.c" yyvsp -= yylen; yyssp -= yylen; *************** yyreturn: *** 6338,6344 **** } ! #line 2689 "/scratch/mitchell/gcc-releases/gcc-4.0.2/gcc-4.0.2/gcc/java/parse.y" /* Helper function to retrieve an OSB count. Should be used when the --- 6336,6342 ---- } ! #line 2687 "/scratch/mitchell/gcc-releases/gcc-4.0.3/gcc-4.0.3/gcc/java/parse.y" /* Helper function to retrieve an OSB count. Should be used when the *************** maybe_create_class_interface_decl (tree *** 7572,7577 **** --- 7570,7583 ---- /* Install a new dependency list element */ create_jdep_list (ctxp); + /* We keep the compilation unit imports in the class so that + they can be used later to resolve type dependencies that + aren't necessary to solve now. */ + TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; + TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; + + TYPE_PACKAGE (TREE_TYPE (decl)) = ctxp->package; + SOURCE_FRONTEND_DEBUG (("Defining class/interface %s", IDENTIFIER_POINTER (qualified_name))); return decl; *************** create_class (int flags, tree id, tree s *** 7846,7857 **** virtual function table in java.lang.object. */ TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node); - /* We keep the compilation unit imports in the class so that - they can be used later to resolve type dependencies that - aren't necessary to solve now. */ - TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; - TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; - /* Add the private this$ field, Replicate final locals still in scope as private final fields mangled like val$. This does not occur for top level (static) inner classes. */ --- 7852,7857 ---- *************** static tree *** 9325,9330 **** --- 9325,9333 ---- jdep_resolve_class (jdep *dep) { tree decl; + + /* Set the correct context for class resolution. */ + current_class = TREE_TYPE (JDEP_ENCLOSING (dep)); if (JDEP_RESOLVED_P (dep)) decl = JDEP_RESOLVED_DECL (dep); *************** do_resolve_class (tree enclosing, tree i *** 9632,9639 **** /* 3- Search according to the current package definition */ if (!QUALIFIED_P (TYPE_NAME (class_type))) { ! if ((new_class_decl = qualify_and_find (class_type, ctxp->package, ! TYPE_NAME (class_type)))) return new_class_decl; } --- 9635,9644 ---- /* 3- Search according to the current package definition */ if (!QUALIFIED_P (TYPE_NAME (class_type))) { ! /* printf ("cc= %s\n", current_class ? IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME ! (current_class))) : "null"); */ ! if ((new_class_decl = qualify_and_find (class_type, ! TYPE_PACKAGE (current_class), TYPE_NAME (class_type)))) return new_class_decl; } *************** java_expand_method_bodies (tree class) *** 11996,12109 **** fields either directly by using the relevant access to this$ or by invoking an access method crafted for that purpose. */ ! /* Build the necessary access from an inner class to an outer ! class. This routine could be optimized to cache previous result (decl, current_class and returned access). When an access method ! needs to be generated, it always takes the form of a read. It might ! be later turned into a write by calling outer_field_access_fix. */ static tree ! build_outer_field_access (tree id, tree decl) { tree access = NULL_TREE; ! tree ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); tree decl_ctx = DECL_CONTEXT (decl); ! /* If the immediate enclosing context of the current class is the ! field decl's class or inherits from it; build the access as ! `this$.'. Note that we will break the `private' barrier ! if we're not emitting bytecodes. */ ! if ((ctx == decl_ctx || inherits_from_p (ctx, decl_ctx)) ! && (!FIELD_PRIVATE (decl) || !flag_emit_class_files )) { tree thisn = build_current_thisn (current_class); access = make_qualified_primary (build_wfl_node (thisn), id, EXPR_WFL_LINECOL (id)); } ! /* Otherwise, generate access methods to outer this and access the ! field (either using an access method or by direct access.) */ else { int lc = EXPR_WFL_LINECOL (id); /* Now we chain the required number of calls to the access$0 to ! get a hold to the enclosing instance we need, and then we ! build the field access. */ ! access = build_access_to_thisn (current_class, decl_ctx, lc); /* If the field is private and we're generating bytecode, then ! we generate an access method */ ! if (FIELD_PRIVATE (decl) && flag_emit_class_files ) { ! tree name = build_outer_field_access_methods (decl); ! access = build_outer_field_access_expr (lc, decl_ctx, ! name, access, NULL_TREE); } ! /* Otherwise we use `access$(this$). ... access$(this$).'. Once again we break the `private' access rule from a foreign ! class. */ else ! access = make_qualified_primary (access, id, lc); } return resolve_expression_name (access, NULL); } ! /* Return a nonzero value if NODE describes an outer field inner ! access. */ static int ! outer_field_access_p (tree type, tree decl) { if (!INNER_CLASS_TYPE_P (type) ! || TREE_CODE (decl) != FIELD_DECL ! || DECL_CONTEXT (decl) == type) return 0; ! /* If the inner class extends the declaration context of the field ! we're trying to access, then this isn't an outer field access */ ! if (inherits_from_p (type, DECL_CONTEXT (decl))) return 0; ! for (type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))); ; ! type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type)))) { ! if (type == DECL_CONTEXT (decl)) ! return 1; ! if (!DECL_CONTEXT (TYPE_NAME (type))) ! { ! /* Before we give up, see whether the field is inherited from ! the enclosing context we're considering. */ ! if (inherits_from_p (type, DECL_CONTEXT (decl))) ! return 1; ! break; ! } } return 0; } ! /* Return a nonzero value if NODE represents an outer field inner ! access that was been already expanded. As a side effect, it returns the name of the field being accessed and the argument passed to the access function, suitable for a regeneration of the access method ! call if necessary. */ static int ! outer_field_expanded_access_p (tree node, tree *name, tree *arg_type, ! tree *arg) { int identified = 0; if (TREE_CODE (node) != CALL_EXPR) return 0; ! /* Well, gcj generates slightly different tree nodes when compiling ! to native or bytecodes. It's the case for function calls. */ if (flag_emit_class_files && TREE_CODE (node) == CALL_EXPR ! && OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0)))) identified = 1; else if (!flag_emit_class_files) { --- 12001,12163 ---- fields either directly by using the relevant access to this$ or by invoking an access method crafted for that purpose. */ ! /* Build the necessary access across nested class boundaries. ! This routine could be optimized to cache previous result (decl, current_class and returned access). When an access method ! needs to be generated, it always takes the form of a read. It might ! be later turned into a write by calling nested_field_access_fix. */ static tree ! build_nested_field_access (tree id, tree decl) { tree access = NULL_TREE; ! tree ctx = NULL_TREE; tree decl_ctx = DECL_CONTEXT (decl); + bool is_static = FIELD_STATIC (decl); ! if (DECL_CONTEXT (TYPE_NAME (current_class))) ! ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); ! ! /* For non-static fields, if the immediate enclosing context of the ! current class is the field decl's class or inherits from it, ! build the access as `this$.'. Note that we will break ! the `private' barrier if we're not emitting bytecodes. */ ! if (!is_static ! && ctx ! && (ctx == decl_ctx || inherits_from_p (ctx, decl_ctx)) ! && (!FIELD_PRIVATE (decl) || !flag_emit_class_files)) { tree thisn = build_current_thisn (current_class); access = make_qualified_primary (build_wfl_node (thisn), id, EXPR_WFL_LINECOL (id)); } ! /* Otherwise, generate and use accessor methods for the field as ! needed. */ else { int lc = EXPR_WFL_LINECOL (id); /* Now we chain the required number of calls to the access$0 to ! get a hold to the enclosing instance we need for a non-static ! field, and then we build the field access. */ ! if (!is_static) ! access = build_access_to_thisn (current_class, decl_ctx, lc); /* If the field is private and we're generating bytecode, then ! we generate an access method. */ ! if (FIELD_PRIVATE (decl) && flag_emit_class_files) { ! tree name = build_nested_field_access_methods (decl); ! access = build_nested_field_access_expr (lc, decl_ctx, ! name, access, NULL_TREE); } ! /* Otherwise we use `access$(this$). ... access$(this$).' ! for non-static fields. Once again we break the `private' access rule from a foreign ! class. */ ! else if (is_static) ! { ! tree class_name = DECL_NAME (TYPE_NAME (decl_ctx)); ! access ! = make_qualified_primary (build_wfl_node (class_name), id, lc); ! } else ! access = make_qualified_primary (access, id, lc); } + return resolve_expression_name (access, NULL); } ! /* Return a nonzero value if DECL describes a member access across nested ! class boundaries. That is, DECL is in a class that either encloses, ! is enclosed by or shares a common enclosing class with the class ! TYPE. */ static int ! nested_member_access_p (tree type, tree decl) { + bool is_static = false; + tree decl_type = DECL_CONTEXT (decl); + tree type_root, decl_type_root; + + if (decl_type == type + || (TREE_CODE (decl) != FIELD_DECL + && TREE_CODE (decl) != VAR_DECL + && TREE_CODE (decl) != FUNCTION_DECL)) + return 0; + if (!INNER_CLASS_TYPE_P (type) ! && !(TREE_CODE (decl_type) == RECORD_TYPE ! && INNER_CLASS_TYPE_P (decl_type))) return 0; ! is_static = (TREE_CODE (decl) == FUNCTION_DECL) ! ? METHOD_STATIC (decl) ! : FIELD_STATIC (decl); ! ! /* If TYPE extends the declaration context of the non-static ! member we're trying to access, then this isn't a nested member ! access we need to worry about. */ ! if (!is_static && inherits_from_p (type, decl_type)) return 0; ! for (type_root = type; ! DECL_CONTEXT (TYPE_NAME (type_root)); ! type_root = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type_root)))) { ! if (type_root == decl_type) ! return 1; ! } ! if (TREE_CODE (decl_type) == RECORD_TYPE ! && INNER_CLASS_TYPE_P (decl_type)) ! { ! for (decl_type_root = decl_type; ! DECL_CONTEXT (TYPE_NAME (decl_type_root)); ! decl_type_root ! = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (decl_type_root)))) ! { ! if (decl_type_root == type) ! return 1; ! } } + else + decl_type_root = decl_type; + + if (type_root == decl_type_root) + return 1; + + /* Before we give up, see whether it is a non-static field + inherited from the enclosing context we are considering. */ + if (!DECL_CONTEXT (TYPE_NAME (type_root)) + && !is_static + && inherits_from_p (type_root, decl_type)) + return 1; return 0; } ! /* Return a nonzero value if NODE represents a cross-nested-class ! access that has already been expanded. As a side effect, it returns the name of the field being accessed and the argument passed to the access function, suitable for a regeneration of the access method ! call if necessary. */ static int ! nested_field_expanded_access_p (tree node, tree *name, tree *arg_type, ! tree *arg) { int identified = 0; if (TREE_CODE (node) != CALL_EXPR) return 0; ! /* Well, GCJ generates slightly different tree nodes when compiling ! to native or bytecodes. It's the case for function calls. */ if (flag_emit_class_files && TREE_CODE (node) == CALL_EXPR ! && NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0)))) identified = 1; else if (!flag_emit_class_files) { *************** outer_field_expanded_access_p (tree node *** 12115,12121 **** node = TREE_OPERAND (node, 0); if (TREE_OPERAND (node, 0) && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL ! && (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))) identified = 1; } --- 12169,12175 ---- node = TREE_OPERAND (node, 0); if (TREE_OPERAND (node, 0) && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL ! && (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))) identified = 1; } *************** outer_field_expanded_access_p (tree node *** 12125,12150 **** { tree argument = TREE_OPERAND (node, 1); *name = DECL_NAME (TREE_OPERAND (node, 0)); ! *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument))); ! *arg = TREE_VALUE (argument); } return identified; } ! /* Detect in NODE an outer field read access from an inner class and ! transform it into a write with RHS as an argument. This function is ! called from the java_complete_lhs when an assignment to a LHS can ! be identified. */ static tree ! outer_field_access_fix (tree wfl, tree node, tree rhs) { tree name, arg_type, arg; ! if (outer_field_expanded_access_p (node, &name, &arg_type, &arg)) { ! node = build_outer_field_access_expr (EXPR_WFL_LINECOL (wfl), ! arg_type, name, arg, rhs); return java_complete_tree (node); } return NULL_TREE; --- 12179,12215 ---- { tree argument = TREE_OPERAND (node, 1); *name = DECL_NAME (TREE_OPERAND (node, 0)); ! ! /* The accessors for static fields do not take in a this$ argument, ! so we take the class name from the accessor's context instead. */ ! if (argument) ! { ! *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument))); ! *arg = TREE_VALUE (argument); ! } ! else ! { ! *arg_type = DECL_CONTEXT (TREE_OPERAND (node, 0)); ! *arg = NULL_TREE; ! } } return identified; } ! /* Detect in NODE cross-nested-class field read access and ! transform it into a write with RHS as an argument. This function ! is called from the java_complete_lhs when an assignment to a LHS can ! be identified. */ static tree ! nested_field_access_fix (tree wfl, tree node, tree rhs) { tree name, arg_type, arg; ! if (nested_field_expanded_access_p (node, &name, &arg_type, &arg)) { ! node = build_nested_field_access_expr (EXPR_WFL_LINECOL (wfl), ! arg_type, name, arg, rhs); return java_complete_tree (node); } return NULL_TREE; *************** outer_field_access_fix (tree wfl, tree n *** 12157,12179 **** read access. */ static tree ! build_outer_field_access_expr (int lc, tree type, tree access_method_name, ! tree arg1, tree arg2) { tree args, cn, access; ! args = arg1 ? arg1 : ! build_wfl_node (build_current_thisn (current_class)); ! args = build_tree_list (NULL_TREE, args); if (arg2) ! args = tree_cons (NULL_TREE, arg2, args); ! access = build_method_invocation (build_wfl_node (access_method_name), args); cn = build_wfl_node (DECL_NAME (TYPE_NAME (type))); return make_qualified_primary (cn, access, lc); } static tree build_new_access_id (void) { --- 12222,12255 ---- read access. */ static tree ! build_nested_field_access_expr (int lc, tree type, tree access_method_name, ! tree arg1, tree arg2) { tree args, cn, access; ! if (arg1) ! args = build_tree_list (NULL_TREE, arg1); ! else ! args = NULL_TREE; if (arg2) ! { ! if (args) ! args = tree_cons (NULL_TREE, arg2, args); ! else ! args = build_tree_list (NULL_TREE, arg2); ! } ! access ! = build_method_invocation (build_wfl_node (access_method_name), args); cn = build_wfl_node (DECL_NAME (TYPE_NAME (type))); + return make_qualified_primary (cn, access, lc); } + /* Build the name of a synthetic accessor used to access class members + across nested class boundaries. */ + static tree build_new_access_id (void) { *************** build_new_access_id (void) *** 12184,12191 **** return get_identifier (buffer); } ! /* Create the static access functions for the outer field DECL. We define a ! read: TREE_TYPE () access$ (DECL_CONTEXT () inst$) { return inst$.field; } --- 12260,12267 ---- return get_identifier (buffer); } ! /* Create the static access functions for the cross-nested-class field DECL. ! We define a read: TREE_TYPE () access$ (DECL_CONTEXT () inst$) { return inst$.field; } *************** build_new_access_id (void) *** 12194,12256 **** TREE_TYPE () value$) { return inst$.field = value$; } ! We should have a usage flags on the DECL so we can lazily turn the ones ! we're using for code generation. FIXME. */ static tree ! build_outer_field_access_methods (tree decl) { ! tree id, args, stmt, mdecl; ! if (FIELD_INNER_ACCESS_P (decl)) ! return FIELD_INNER_ACCESS (decl); MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl); ! /* Create the identifier and a function named after it. */ id = build_new_access_id (); /* The identifier is marked as bearing the name of a generated write ! access function for outer field accessed from inner classes. */ ! OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1; ! /* Create the read access */ ! args = build_tree_list (inst_id, build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); stmt = build_return (0, stmt); ! mdecl = build_outer_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, args, stmt); DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; ! /* Create the write access method. No write access for final variable */ if (!FIELD_FINAL (decl)) { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (TREE_CHAIN (args)) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt, build_wfl_node (wpv_id))); ! mdecl = build_outer_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, ! args, stmt); } DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; /* Return the access name */ ! return FIELD_INNER_ACCESS (decl) = id; } ! /* Build an field access method NAME. */ static tree ! build_outer_field_access_method (tree class, tree type, tree name, ! tree args, tree body) { tree saved_current_function_decl, mdecl; --- 12270,12358 ---- TREE_TYPE () value$) { return inst$.field = value$; } ! For static fields, these methods are generated without the instance ! parameter. ! We should have a usage flag on the DECL so we can lazily turn the ones ! we're using for code generation. FIXME. */ static tree ! build_nested_field_access_methods (tree decl) { ! tree id, args, stmt, mdecl, class_name = NULL_TREE; ! bool is_static = FIELD_STATIC (decl); ! if (FIELD_NESTED_ACCESS_P (decl)) ! return FIELD_NESTED_ACCESS (decl); MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl); ! /* Create the identifier and a function named after it. */ id = build_new_access_id (); /* The identifier is marked as bearing the name of a generated write ! access function for outer field accessed from inner classes. */ ! NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1; ! /* Create the read access. */ ! if (!is_static) ! { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); ! } ! else ! { ! args = end_params_node; ! class_name = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))); ! stmt = make_qualified_primary (build_wfl_node (class_name), ! build_wfl_node (DECL_NAME (decl)), 0); ! } stmt = build_return (0, stmt); ! mdecl = build_nested_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, args, stmt); DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; ! /* Create the write access method. No write access for final variable */ if (!FIELD_FINAL (decl)) { ! if (!is_static) ! { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (TREE_CHAIN (args)) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), ! 0); ! } ! else ! { ! args = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (class_name), ! build_wfl_node (DECL_NAME (decl)), ! 0); ! } stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt, build_wfl_node (wpv_id))); ! mdecl = build_nested_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, ! args, stmt); } DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; /* Return the access name */ ! return FIELD_NESTED_ACCESS (decl) = id; } ! /* Build a field access method NAME. */ static tree ! build_nested_field_access_method (tree class, tree type, tree name, ! tree args, tree body) { tree saved_current_function_decl, mdecl; *************** build_outer_field_access_method (tree cl *** 12271,12280 **** /* This section deals with building access function necessary for ! certain kinds of method invocation from inner classes. */ static tree ! build_outer_method_access_method (tree decl) { tree saved_current_function_decl, mdecl; tree args = NULL_TREE, call_args = NULL_TREE; --- 12373,12382 ---- /* This section deals with building access function necessary for ! certain kinds of method invocation across nested class boundaries. */ static tree ! build_nested_method_access_method (tree decl) { tree saved_current_function_decl, mdecl; tree args = NULL_TREE, call_args = NULL_TREE; *************** build_outer_method_access_method (tree d *** 12294,12300 **** /* Obtain an access identifier and mark it */ id = build_new_access_id (); ! OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1; carg = TYPE_ARG_TYPES (TREE_TYPE (decl)); /* Create the arguments, as much as the original */ --- 12396,12402 ---- /* Obtain an access identifier and mark it */ id = build_new_access_id (); ! NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1; carg = TYPE_ARG_TYPES (TREE_TYPE (decl)); /* Create the arguments, as much as the original */ *************** build_outer_method_access_method (tree d *** 12323,12330 **** start_artificial_method_body (mdecl); /* The actual method invocation uses the same args. When invoking a ! static methods that way, we don't want to skip the first ! argument. */ carg = args; if (!METHOD_STATIC (decl)) carg = TREE_CHAIN (carg); --- 12425,12431 ---- start_artificial_method_body (mdecl); /* The actual method invocation uses the same args. When invoking a ! static methods that way, we don't want to skip the first argument. */ carg = args; if (!METHOD_STATIC (decl)) carg = TREE_CHAIN (carg); *************** build_outer_method_access_method (tree d *** 12343,12352 **** end_artificial_method_body (mdecl); current_function_decl = saved_current_function_decl; ! /* Back tag the access function so it know what it accesses */ DECL_FUNCTION_ACCESS_DECL (decl) = mdecl; ! /* Tag the current method so it knows it has an access generated */ return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl; } --- 12444,12453 ---- end_artificial_method_body (mdecl); current_function_decl = saved_current_function_decl; ! /* Back tag the access function so it know what it accesses. */ DECL_FUNCTION_ACCESS_DECL (decl) = mdecl; ! /* Tag the current method so it knows it has an access generated. */ return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl; } *************** build_outer_method_access_method (tree d *** 12360,12366 **** others. Access methods to this$ are build on the fly if necessary. This CAN'T be used to solely access this$ from this$ (which alway yield to special cases and optimization, see ! for example build_outer_field_access). */ static tree build_access_to_thisn (tree from, tree to, int lc) --- 12461,12467 ---- others. Access methods to this$ are build on the fly if necessary. This CAN'T be used to solely access this$ from this$ (which alway yield to special cases and optimization, see ! for example build_nested_field_access). */ static tree build_access_to_thisn (tree from, tree to, int lc) *************** resolve_expression_name (tree id, tree * *** 13165,13179 **** /* If we're processing an inner class and we're trying to access a field belonging to an outer class, build ! the access to the field */ ! if (!fs && outer_field_access_p (current_class, decl)) { ! if (CLASS_STATIC (TYPE_NAME (current_class))) { static_ref_err (id, DECL_NAME (decl), current_class); return error_mark_node; } ! access = build_outer_field_access (id, decl); if (orig) *orig = access; return access; --- 13266,13287 ---- /* If we're processing an inner class and we're trying to access a field belonging to an outer class, build ! the access to the field. ! As usual, we have to treat initialized static final ! variables as a special case. */ ! if (nested_member_access_p (current_class, decl) ! && ! (JDECL_P (decl) && CLASS_FINAL_VARIABLE_P (decl) ! && DECL_INITIAL (decl) != NULL_TREE ! && (JSTRING_TYPE_P (TREE_TYPE (decl)) ! || JNUMERIC_TYPE_P (TREE_TYPE (decl))) ! && TREE_CONSTANT (DECL_INITIAL (decl)))) { ! if (!fs && CLASS_STATIC (TYPE_NAME (current_class))) { static_ref_err (id, DECL_NAME (decl), current_class); return error_mark_node; } ! access = build_nested_field_access (id, decl); if (orig) *orig = access; return access; *************** resolve_qualified_expression_name (tree *** 13707,13724 **** decl = QUAL_RESOLUTION (q); if (!type) { ! if (TREE_CODE (decl) == FIELD_DECL && !FIELD_STATIC (decl)) { ! if (current_this) ! *where_found = current_this; ! else ! { ! static_ref_err (qual_wfl, DECL_NAME (decl), ! current_class); ! return 1; ! } ! if (outer_field_access_p (current_class, decl)) ! decl = build_outer_field_access (qual_wfl, decl); } else { --- 13815,13843 ---- decl = QUAL_RESOLUTION (q); if (!type) { ! if (TREE_CODE (decl) == FIELD_DECL ! || TREE_CODE (decl) == VAR_DECL) { ! if (TREE_CODE (decl) == FIELD_DECL ! && !FIELD_STATIC (decl)) ! { ! if (current_this) ! *where_found = current_this; ! else ! { ! static_ref_err (qual_wfl, DECL_NAME (decl), ! current_class); ! return 1; ! } ! } ! else ! { ! *where_found = TREE_TYPE (decl); ! if (TREE_CODE (*where_found) == POINTER_TYPE) ! *where_found = TREE_TYPE (*where_found); ! } ! if (nested_member_access_p (current_class, decl)) ! decl = build_nested_field_access (qual_wfl, decl); } else { *************** resolve_qualified_expression_name (tree *** 13827,13833 **** } from_cast = from_super = 0; ! /* It's an access from a type but it isn't static, we make it relative to `this'. */ if (!is_static && from_type) decl = current_this; --- 13946,13952 ---- } from_cast = from_super = 0; ! /* If it's an access from a type but isn't static, we make it relative to `this'. */ if (!is_static && from_type) decl = current_this; *************** resolve_qualified_expression_name (tree *** 13842,13849 **** return 1; } ! /* We want to keep the location were found it, and the type ! we found. */ *where_found = decl; *type_found = type; --- 13961,13968 ---- return 1; } ! /* We want to keep the location where we found it, and the ! type we found. */ *where_found = decl; *type_found = type; *************** resolve_qualified_expression_name (tree *** 13851,13860 **** qualified this */ if (from_qualified_this) { ! field_decl = build_outer_field_access (qual_wfl, field_decl); from_qualified_this = 0; } /* This is the decl found and eventually the next one to search from */ decl = field_decl; --- 13970,13987 ---- qualified this */ if (from_qualified_this) { ! field_decl ! = build_nested_field_access (qual_wfl, field_decl); from_qualified_this = 0; } + /* If needed, generate accessors for static field access. */ + if (is_static + && FIELD_PRIVATE (field_decl) + && flag_emit_class_files + && nested_member_access_p (current_class, field_decl)) + field_decl = build_nested_field_access (qual_wfl, field_decl); + /* This is the decl found and eventually the next one to search from */ decl = field_decl; *************** check_deprecation (tree wfl, tree decl) *** 14023,14059 **** /* Returns 1 if class was declared in the current package, 0 otherwise */ - static GTY(()) tree cicp_cache; static int class_in_current_package (tree class) { ! int qualified_flag; ! tree left; ! ! if (cicp_cache == class) ! return 1; ! ! qualified_flag = QUALIFIED_P (DECL_NAME (TYPE_NAME (class))); ! ! /* If the current package is empty and the name of CLASS is ! qualified, class isn't in the current package. If there is a ! current package and the name of the CLASS is not qualified, class ! isn't in the current package */ ! if ((!ctxp->package && qualified_flag) || (ctxp->package && !qualified_flag)) ! return 0; ! ! /* If there is not package and the name of CLASS isn't qualified, ! they belong to the same unnamed package */ ! if (!ctxp->package && !qualified_flag) return 1; - - /* Compare the left part of the name of CLASS with the package name */ - split_qualified_name (&left, NULL, DECL_NAME (TYPE_NAME (class))); - if (ctxp->package == left) - { - cicp_cache = class; - return 1; - } return 0; } --- 14150,14160 ---- /* Returns 1 if class was declared in the current package, 0 otherwise */ static int class_in_current_package (tree class) { ! if (TYPE_PACKAGE (current_class) == TYPE_PACKAGE (class)) return 1; return 0; } *************** patch_method_invocation (tree patch, tre *** 14152,14167 **** IDENTIFIER_POINTER (name)); PATCH_METHOD_RETURN_ERROR (); } ! if (list && !METHOD_STATIC (list)) { ! char *fct_name = xstrdup (lang_printable_name (list, 2)); ! parse_error_context ! (identifier_wfl, ! "Can't make static reference to method %<%s %s%> in class %qs", ! lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0), ! fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); ! free (fct_name); ! PATCH_METHOD_RETURN_ERROR (); } } else --- 14253,14274 ---- IDENTIFIER_POINTER (name)); PATCH_METHOD_RETURN_ERROR (); } ! if (list) { ! if (METHOD_STATIC (list)) ! maybe_use_access_method (0, &list, NULL); ! else ! { ! char *fct_name = xstrdup (lang_printable_name (list, 2)); ! parse_error_context ! (identifier_wfl, ! "Can't make static reference to method %<%s %s%> in class %qs", ! lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0), ! fct_name, ! IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); ! free (fct_name); ! PATCH_METHOD_RETURN_ERROR (); ! } } } else *************** patch_method_invocation (tree patch, tre *** 14278,14284 **** && DECL_NAME (list) == get_identifier ("clone")) is_array_clone_call = 1; ! /* Check for static reference if non static methods */ if (check_for_static_method_reference (wfl, patch, list, class_to_search, primary)) PATCH_METHOD_RETURN_ERROR (); --- 14385,14391 ---- && DECL_NAME (list) == get_identifier ("clone")) is_array_clone_call = 1; ! /* Check for static reference of non static methods. */ if (check_for_static_method_reference (wfl, patch, list, class_to_search, primary)) PATCH_METHOD_RETURN_ERROR (); *************** patch_method_invocation (tree patch, tre *** 14298,14305 **** } /* Non static methods are called with the current object extra ! argument. If patch a `new TYPE()', the argument is the value ! returned by the object allocator. If method is resolved as a primary, use the primary otherwise use the current THIS. */ args = nreverse (args); if (TREE_CODE (patch) != NEW_CLASS_EXPR) --- 14405,14412 ---- } /* Non static methods are called with the current object extra ! argument. If PATCH is a `new TYPE()', the argument is the value ! returned by the object allocator. If method is resolved as a primary, use the primary otherwise use the current THIS. */ args = nreverse (args); if (TREE_CODE (patch) != NEW_CLASS_EXPR) *************** patch_method_invocation (tree patch, tre *** 14311,14326 **** 1) We're not generating bytecodes: ! - LIST is non static. It's invocation is transformed from x(a1,...,an) into this$.x(a1,....an). ! - LIST is static. It's invocation is transformed from x(a1,...,an) into TYPE_OF(this$).x(a1,....an) 2) We're generating bytecodes: ! - LIST is non static. It's invocation is transformed from x(a1,....,an) into access$(this$,a1,...,an). ! - LIST is static. It's invocation is transformed from x(a1,....,an) into TYPE_OF(this$).x(a1,....an). Of course, this$ can be arbitrarily complex, ranging from --- 14418,14433 ---- 1) We're not generating bytecodes: ! - LIST is non-static. Its invocation is transformed from x(a1,...,an) into this$.x(a1,....an). ! - LIST is static. Its invocation is transformed from x(a1,...,an) into TYPE_OF(this$).x(a1,....an) 2) We're generating bytecodes: ! - LIST is non-static. Its invocation is transformed from x(a1,....,an) into access$(this$,a1,...,an). ! - LIST is static. Its invocation is transformed from x(a1,....,an) into TYPE_OF(this$).x(a1,....an). Of course, this$ can be arbitrarily complex, ranging from *************** patch_method_invocation (tree patch, tre *** 14329,14338 **** maybe_use_access_method returns a nonzero value if the this_arg has to be moved into the (then generated) stub ! argument list. In the meantime, the selected function ! might have be replaced by a generated stub. */ ! if (!primary && ! maybe_use_access_method (is_super_init, &list, &this_arg)) { args = tree_cons (NULL_TREE, this_arg, args); this_arg = NULL_TREE; /* So it doesn't get chained twice */ --- 14436,14447 ---- maybe_use_access_method returns a nonzero value if the this_arg has to be moved into the (then generated) stub ! argument list. In the meantime, the selected function ! might have been replaced by a generated stub. */ ! if (METHOD_STATIC (list)) ! maybe_use_access_method (0, &list, NULL); ! else if (!primary && ! maybe_use_access_method (is_super_init, &list, &this_arg)) { args = tree_cons (NULL_TREE, this_arg, args); this_arg = NULL_TREE; /* So it doesn't get chained twice */ *************** check_for_static_method_reference (tree *** 14500,14507 **** return 0; } ! /* Fix the invocation of *MDECL if necessary in the case of a ! invocation from an inner class. *THIS_ARG might be modified appropriately and an alternative access to *MDECL might be returned. */ --- 14609,14616 ---- return 0; } ! /* Fix the invocation of *MDECL if necessary in the case of an ! invocation across a nested class. *THIS_ARG might be modified appropriately and an alternative access to *MDECL might be returned. */ *************** static int *** 14509,14533 **** maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) { tree ctx; ! tree md = *mdecl, ta = *this_arg; int to_return = 0; int non_static_context = !METHOD_STATIC (md); if (is_super_init - || DECL_CONTEXT (md) == current_class - || !PURE_INNER_CLASS_TYPE_P (current_class) || DECL_FINIT_P (md) ! || DECL_INSTINIT_P (md)) return 0; /* If we're calling a method found in an enclosing class, generate ! what it takes to retrieve the right this. Don't do that if we're ! invoking a static method. Note that if MD's type is unrelated to CURRENT_CLASS, then the current this can be used. */ if (non_static_context ! && !inherits_from_p (current_class, DECL_CONTEXT (md))) { ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); if (inherits_from_p (ctx, DECL_CONTEXT (md))) { --- 14618,14643 ---- maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) { tree ctx; ! tree md = *mdecl, ta = NULL_TREE; int to_return = 0; int non_static_context = !METHOD_STATIC (md); if (is_super_init || DECL_FINIT_P (md) ! || DECL_INSTINIT_P (md) ! || !nested_member_access_p (current_class, md)) return 0; /* If we're calling a method found in an enclosing class, generate ! what it takes to retrieve the right `this'. Don't do that if we're ! invoking a static method. Note that if MD's type is unrelated to CURRENT_CLASS, then the current this can be used. */ if (non_static_context ! && !inherits_from_p (current_class, DECL_CONTEXT (md)) ! && DECL_CONTEXT (TYPE_NAME (current_class))) { + ta = *this_arg; ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); if (inherits_from_p (ctx, DECL_CONTEXT (md))) { *************** maybe_use_access_method (int is_super_in *** 14553,14568 **** } /* We might have to use an access method to get to MD. We can ! break the method access rule as far as we're not generating ! bytecode */ if (METHOD_PRIVATE (md) && flag_emit_class_files) { ! md = build_outer_method_access_method (md); to_return = 1; } *mdecl = md; ! *this_arg = ta; /* Returning a nonzero value indicates we were doing a non static method invocation that is now a static invocation. It will have --- 14663,14679 ---- } /* We might have to use an access method to get to MD. We can ! break the method access rule as long as we're not generating ! bytecode. */ if (METHOD_PRIVATE (md) && flag_emit_class_files) { ! md = build_nested_method_access_method (md); to_return = 1; } *mdecl = md; ! if (this_arg) ! *this_arg = ta; /* Returning a nonzero value indicates we were doing a non static method invocation that is now a static invocation. It will have *************** lookup_method_invoke (int lc, tree cl, t *** 14787,14792 **** --- 14898,14914 ---- /* And promoted */ if (TREE_CODE (current_arg) == RECORD_TYPE) current_arg = promote_type (current_arg); + /* If we're building an anonymous constructor call, and one of + the arguments has array type, cast it to a size-less array + type. This prevents us from getting a strange gcj-specific + "sized array" signature in the constructor's signature. */ + if (lc && ANONYMOUS_CLASS_P (class) + && TREE_CODE (current_arg) == POINTER_TYPE + && TYPE_ARRAY_P (TREE_TYPE (current_arg))) + { + tree elt = TYPE_ARRAY_ELEMENT (TREE_TYPE (current_arg)); + current_arg = build_pointer_type (build_java_array_type (elt, -1)); + } atl = tree_cons (NULL_TREE, current_arg, atl); } *************** java_complete_lhs (tree node) *** 15401,15408 **** /* First, the case expression must be constant. Values of final fields are accepted. */ cn = fold (cn); ! if ((TREE_CODE (cn) == COMPOUND_EXPR || TREE_CODE (cn) == COMPONENT_REF) && JDECL_P (TREE_OPERAND (cn, 1)) && FIELD_FINAL (TREE_OPERAND (cn, 1)) && DECL_INITIAL (TREE_OPERAND (cn, 1))) --- 15523,15535 ---- /* First, the case expression must be constant. Values of final fields are accepted. */ + nn = fold_constant_for_init (cn, NULL_TREE); + if (nn != NULL_TREE) + cn = nn; + cn = fold (cn); ! if ((TREE_CODE (cn) == COMPOUND_EXPR ! || TREE_CODE (cn) == COMPONENT_REF) && JDECL_P (TREE_OPERAND (cn, 1)) && FIELD_FINAL (TREE_OPERAND (cn, 1)) && DECL_INITIAL (TREE_OPERAND (cn, 1))) *************** java_complete_lhs (tree node) *** 15844,15853 **** if ((nn = patch_string (TREE_OPERAND (node, 1)))) TREE_OPERAND (node, 1) = nn; ! if ((nn = outer_field_access_fix (wfl_op1, TREE_OPERAND (node, 0), ! TREE_OPERAND (node, 1)))) { ! /* We return error_mark_node if outer_field_access_fix detects we write into a final. */ if (nn == error_mark_node) return error_mark_node; --- 15971,15980 ---- if ((nn = patch_string (TREE_OPERAND (node, 1)))) TREE_OPERAND (node, 1) = nn; ! if ((nn = nested_field_access_fix (wfl_op1, TREE_OPERAND (node, 0), ! TREE_OPERAND (node, 1)))) { ! /* We return error_mark_node if nested_field_access_fix detects we write into a final. */ if (nn == error_mark_node) return error_mark_node; *************** java_complete_lhs (tree node) *** 15921,15927 **** TREE_OPERAND (node, 1) = nn; } ! return patch_binop (node, wfl_op1, wfl_op2); case INSTANCEOF_EXPR: wfl_op1 = TREE_OPERAND (node, 0); --- 16048,16054 ---- TREE_OPERAND (node, 1) = nn; } ! return patch_binop (node, wfl_op1, wfl_op2, 0); case INSTANCEOF_EXPR: wfl_op1 = TREE_OPERAND (node, 0); *************** java_complete_lhs (tree node) *** 15931,15937 **** TREE_TYPE (node) = boolean_type_node; return node; } ! return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1)); case UNARY_PLUS_EXPR: case NEGATE_EXPR: --- 16058,16064 ---- TREE_TYPE (node) = boolean_type_node; return node; } ! return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1), 0); case UNARY_PLUS_EXPR: case NEGATE_EXPR: *************** java_refold (tree t) *** 17066,17072 **** of remaining nodes and detects more errors in certain cases. */ static tree ! patch_binop (tree node, tree wfl_op1, tree wfl_op2) { tree op1 = TREE_OPERAND (node, 0); tree op2 = TREE_OPERAND (node, 1); --- 17193,17199 ---- of remaining nodes and detects more errors in certain cases. */ static tree ! patch_binop (tree node, tree wfl_op1, tree wfl_op2, int folding) { tree op1 = TREE_OPERAND (node, 0); tree op2 = TREE_OPERAND (node, 1); *************** patch_binop (tree node, tree wfl_op1, tr *** 17248,17263 **** build_int_cst (NULL_TREE, 0x3f))); /* The >>> operator is a >> operating on unsigned quantities */ ! if (code == URSHIFT_EXPR && ! flag_emit_class_files) { tree to_return; tree utype = java_unsigned_type (prom_type); op1 = convert (utype, op1); ! TREE_SET_CODE (node, RSHIFT_EXPR); ! TREE_OPERAND (node, 0) = op1; ! TREE_OPERAND (node, 1) = op2; ! TREE_TYPE (node) = utype; ! to_return = convert (prom_type, node); /* Copy the original value of the COMPOUND_ASSIGN_P flag */ COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node); TREE_SIDE_EFFECTS (to_return) --- 17375,17388 ---- build_int_cst (NULL_TREE, 0x3f))); /* The >>> operator is a >> operating on unsigned quantities */ ! if (code == URSHIFT_EXPR && (folding || ! flag_emit_class_files)) { tree to_return; tree utype = java_unsigned_type (prom_type); op1 = convert (utype, op1); ! ! to_return = fold (build2 (RSHIFT_EXPR, utype, op1, op2)); ! to_return = convert (prom_type, to_return); /* Copy the original value of the COMPOUND_ASSIGN_P flag */ COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node); TREE_SIDE_EFFECTS (to_return) *************** patch_unaryop (tree node, tree wfl_op) *** 17879,17885 **** tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); tree prom_type = NULL_TREE, value, decl; ! int outer_field_flag = 0; int code = TREE_CODE (node); int error_found = 0; --- 18004,18010 ---- tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); tree prom_type = NULL_TREE, value, decl; ! int nested_field_flag = 0; int code = TREE_CODE (node); int error_found = 0; *************** patch_unaryop (tree node, tree wfl_op) *** 17896,17905 **** /* 15.14.2 Prefix Decrement Operator -- */ case PREDECREMENT_EXPR: op = decl = extract_field_decl (op); ! outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL); /* We might be trying to change an outer field accessed using access method. */ ! if (outer_field_flag) { /* Retrieve the decl of the field we're trying to access. We do that by first retrieving the function we would call to --- 18021,18031 ---- /* 15.14.2 Prefix Decrement Operator -- */ case PREDECREMENT_EXPR: op = decl = extract_field_decl (op); ! nested_field_flag ! = nested_field_expanded_access_p (op, NULL, NULL, NULL); /* We might be trying to change an outer field accessed using access method. */ ! if (nested_field_flag) { /* Retrieve the decl of the field we're trying to access. We do that by first retrieving the function we would call to *************** patch_unaryop (tree node, tree wfl_op) *** 17953,17967 **** } /* We remember we might be accessing an outer field */ ! if (outer_field_flag) { /* We re-generate an access to the field */ value = build2 (PLUS_EXPR, TREE_TYPE (op), ! build_outer_field_access (wfl_op, decl), value); /* And we patch the original access$() into a write with plus_op as a rhs */ ! return outer_field_access_fix (node, op, value); } /* And write back into the node. */ --- 18079,18093 ---- } /* We remember we might be accessing an outer field */ ! if (nested_field_flag) { /* We re-generate an access to the field */ value = build2 (PLUS_EXPR, TREE_TYPE (op), ! build_nested_field_access (wfl_op, decl), value); /* And we patch the original access$() into a write with plus_op as a rhs */ ! return nested_field_access_fix (node, op, value); } /* And write back into the node. */ *************** patch_unaryop (tree node, tree wfl_op) *** 18042,18047 **** --- 18168,18179 ---- return value; } break; + + case NOP_EXPR: + /* This can only happen when the type is already known. */ + gcc_assert (TREE_TYPE (node) != NULL_TREE); + prom_type = TREE_TYPE (node); + break; } if (error_found) *************** check_thrown_exceptions ( *** 19556,19562 **** int is_array_call = 0; /* Skip check within generated methods, such as access$. */ ! if (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl))) return; if (this_expr != NULL_TREE --- 19688,19694 ---- int is_array_call = 0; /* Skip check within generated methods, such as access$. */ ! if (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl))) return; if (this_expr != NULL_TREE *************** fold_constant_for_init (tree node, tree *** 19854,19866 **** if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 1) = val; ! return patch_binop (node, op0, op1); case UNARY_PLUS_EXPR: case NEGATE_EXPR: case TRUTH_NOT_EXPR: case BIT_NOT_EXPR: case CONVERT_EXPR: op0 = TREE_OPERAND (node, 0); val = fold_constant_for_init (op0, context); if (val == NULL_TREE || ! TREE_CONSTANT (val)) --- 19986,19999 ---- if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 1) = val; ! return patch_binop (node, op0, op1, 1); case UNARY_PLUS_EXPR: case NEGATE_EXPR: case TRUTH_NOT_EXPR: case BIT_NOT_EXPR: case CONVERT_EXPR: + case NOP_EXPR: op0 = TREE_OPERAND (node, 0); val = fold_constant_for_init (op0, context); if (val == NULL_TREE || ! TREE_CONSTANT (val)) *************** fold_constant_for_init (tree node, tree *** 19886,19893 **** if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 2) = val; ! return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 1) ! : TREE_OPERAND (node, 2); case VAR_DECL: case FIELD_DECL: --- 20019,20026 ---- if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 2) = val; ! return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 2) ! : TREE_OPERAND (node, 1); case VAR_DECL: case FIELD_DECL: diff -Nrcpad gcc-4.0.2/gcc/java/parse.y gcc-4.0.3/gcc/java/parse.y *** gcc-4.0.2/gcc/java/parse.y Wed Aug 17 12:57:04 2005 --- gcc-4.0.3/gcc/java/parse.y Fri Dec 16 17:24:42 2005 *************** static tree build_new_invocation (tree, *** 162,168 **** static tree build_assignment (int, int, tree, tree); static tree build_binop (enum tree_code, int, tree, tree); static tree patch_assignment (tree, tree); ! static tree patch_binop (tree, tree, tree); static tree build_unaryop (int, int, tree); static tree build_incdec (int, int, tree, int); static tree patch_unaryop (tree, tree); --- 162,168 ---- static tree build_assignment (int, int, tree, tree); static tree build_binop (enum tree_code, int, tree, tree); static tree patch_assignment (tree, tree); ! static tree patch_binop (tree, tree, tree, int); static tree build_unaryop (int, int, tree); static tree build_incdec (int, int, tree, int); static tree patch_unaryop (tree, tree); *************** static tree build_current_thisn (tree); *** 321,339 **** static tree build_access_to_thisn (tree, tree, int); static tree maybe_build_thisn_access_method (tree); ! static tree build_outer_field_access (tree, tree); ! static tree build_outer_field_access_methods (tree); ! static tree build_outer_field_access_expr (int, tree, tree, ! tree, tree); ! static tree build_outer_method_access_method (tree); static tree build_new_access_id (void); - static tree build_outer_field_access_method (tree, tree, tree, - tree, tree); ! static int outer_field_access_p (tree, tree); ! static int outer_field_expanded_access_p (tree, tree *, ! tree *, tree *); ! static tree outer_field_access_fix (tree, tree, tree); static tree build_incomplete_class_ref (int, tree); static tree patch_incomplete_class_ref (tree); static tree create_anonymous_class (tree); --- 321,337 ---- static tree build_access_to_thisn (tree, tree, int); static tree maybe_build_thisn_access_method (tree); ! static tree build_nested_field_access (tree, tree); ! static tree build_nested_field_access_methods (tree); ! static tree build_nested_field_access_method (tree, tree, tree, tree, tree); ! static tree build_nested_field_access_expr (int, tree, tree, tree, tree); ! static tree build_nested_method_access_method (tree); static tree build_new_access_id (void); ! static int nested_member_access_p (tree, tree); ! static int nested_field_expanded_access_p (tree, tree *, tree *, tree *); ! static tree nested_field_access_fix (tree, tree, tree); ! static tree build_incomplete_class_ref (int, tree); static tree patch_incomplete_class_ref (tree); static tree create_anonymous_class (tree); *************** maybe_create_class_interface_decl (tree *** 3919,3924 **** --- 3917,3930 ---- /* Install a new dependency list element */ create_jdep_list (ctxp); + /* We keep the compilation unit imports in the class so that + they can be used later to resolve type dependencies that + aren't necessary to solve now. */ + TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; + TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; + + TYPE_PACKAGE (TREE_TYPE (decl)) = ctxp->package; + SOURCE_FRONTEND_DEBUG (("Defining class/interface %s", IDENTIFIER_POINTER (qualified_name))); return decl; *************** create_class (int flags, tree id, tree s *** 4193,4204 **** virtual function table in java.lang.object. */ TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node); - /* We keep the compilation unit imports in the class so that - they can be used later to resolve type dependencies that - aren't necessary to solve now. */ - TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; - TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; - /* Add the private this$ field, Replicate final locals still in scope as private final fields mangled like val$. This does not occur for top level (static) inner classes. */ --- 4199,4204 ---- *************** static tree *** 5672,5677 **** --- 5672,5680 ---- jdep_resolve_class (jdep *dep) { tree decl; + + /* Set the correct context for class resolution. */ + current_class = TREE_TYPE (JDEP_ENCLOSING (dep)); if (JDEP_RESOLVED_P (dep)) decl = JDEP_RESOLVED_DECL (dep); *************** do_resolve_class (tree enclosing, tree i *** 5979,5986 **** /* 3- Search according to the current package definition */ if (!QUALIFIED_P (TYPE_NAME (class_type))) { ! if ((new_class_decl = qualify_and_find (class_type, ctxp->package, ! TYPE_NAME (class_type)))) return new_class_decl; } --- 5982,5991 ---- /* 3- Search according to the current package definition */ if (!QUALIFIED_P (TYPE_NAME (class_type))) { ! /* printf ("cc= %s\n", current_class ? IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME ! (current_class))) : "null"); */ ! if ((new_class_decl = qualify_and_find (class_type, ! TYPE_PACKAGE (current_class), TYPE_NAME (class_type)))) return new_class_decl; } *************** java_expand_method_bodies (tree class) *** 8343,8456 **** fields either directly by using the relevant access to this$ or by invoking an access method crafted for that purpose. */ ! /* Build the necessary access from an inner class to an outer ! class. This routine could be optimized to cache previous result (decl, current_class and returned access). When an access method ! needs to be generated, it always takes the form of a read. It might ! be later turned into a write by calling outer_field_access_fix. */ static tree ! build_outer_field_access (tree id, tree decl) { tree access = NULL_TREE; ! tree ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); tree decl_ctx = DECL_CONTEXT (decl); ! /* If the immediate enclosing context of the current class is the ! field decl's class or inherits from it; build the access as ! `this$.'. Note that we will break the `private' barrier ! if we're not emitting bytecodes. */ ! if ((ctx == decl_ctx || inherits_from_p (ctx, decl_ctx)) ! && (!FIELD_PRIVATE (decl) || !flag_emit_class_files )) { tree thisn = build_current_thisn (current_class); access = make_qualified_primary (build_wfl_node (thisn), id, EXPR_WFL_LINECOL (id)); } ! /* Otherwise, generate access methods to outer this and access the ! field (either using an access method or by direct access.) */ else { int lc = EXPR_WFL_LINECOL (id); /* Now we chain the required number of calls to the access$0 to ! get a hold to the enclosing instance we need, and then we ! build the field access. */ ! access = build_access_to_thisn (current_class, decl_ctx, lc); /* If the field is private and we're generating bytecode, then ! we generate an access method */ ! if (FIELD_PRIVATE (decl) && flag_emit_class_files ) { ! tree name = build_outer_field_access_methods (decl); ! access = build_outer_field_access_expr (lc, decl_ctx, ! name, access, NULL_TREE); } ! /* Otherwise we use `access$(this$). ... access$(this$).'. Once again we break the `private' access rule from a foreign ! class. */ else ! access = make_qualified_primary (access, id, lc); } return resolve_expression_name (access, NULL); } ! /* Return a nonzero value if NODE describes an outer field inner ! access. */ static int ! outer_field_access_p (tree type, tree decl) { if (!INNER_CLASS_TYPE_P (type) ! || TREE_CODE (decl) != FIELD_DECL ! || DECL_CONTEXT (decl) == type) return 0; ! /* If the inner class extends the declaration context of the field ! we're trying to access, then this isn't an outer field access */ ! if (inherits_from_p (type, DECL_CONTEXT (decl))) return 0; ! for (type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type))); ; ! type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type)))) { ! if (type == DECL_CONTEXT (decl)) ! return 1; ! if (!DECL_CONTEXT (TYPE_NAME (type))) ! { ! /* Before we give up, see whether the field is inherited from ! the enclosing context we're considering. */ ! if (inherits_from_p (type, DECL_CONTEXT (decl))) ! return 1; ! break; ! } } return 0; } ! /* Return a nonzero value if NODE represents an outer field inner ! access that was been already expanded. As a side effect, it returns the name of the field being accessed and the argument passed to the access function, suitable for a regeneration of the access method ! call if necessary. */ static int ! outer_field_expanded_access_p (tree node, tree *name, tree *arg_type, ! tree *arg) { int identified = 0; if (TREE_CODE (node) != CALL_EXPR) return 0; ! /* Well, gcj generates slightly different tree nodes when compiling ! to native or bytecodes. It's the case for function calls. */ if (flag_emit_class_files && TREE_CODE (node) == CALL_EXPR ! && OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0)))) identified = 1; else if (!flag_emit_class_files) { --- 8348,8510 ---- fields either directly by using the relevant access to this$ or by invoking an access method crafted for that purpose. */ ! /* Build the necessary access across nested class boundaries. ! This routine could be optimized to cache previous result (decl, current_class and returned access). When an access method ! needs to be generated, it always takes the form of a read. It might ! be later turned into a write by calling nested_field_access_fix. */ static tree ! build_nested_field_access (tree id, tree decl) { tree access = NULL_TREE; ! tree ctx = NULL_TREE; tree decl_ctx = DECL_CONTEXT (decl); + bool is_static = FIELD_STATIC (decl); ! if (DECL_CONTEXT (TYPE_NAME (current_class))) ! ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); ! ! /* For non-static fields, if the immediate enclosing context of the ! current class is the field decl's class or inherits from it, ! build the access as `this$.'. Note that we will break ! the `private' barrier if we're not emitting bytecodes. */ ! if (!is_static ! && ctx ! && (ctx == decl_ctx || inherits_from_p (ctx, decl_ctx)) ! && (!FIELD_PRIVATE (decl) || !flag_emit_class_files)) { tree thisn = build_current_thisn (current_class); access = make_qualified_primary (build_wfl_node (thisn), id, EXPR_WFL_LINECOL (id)); } ! /* Otherwise, generate and use accessor methods for the field as ! needed. */ else { int lc = EXPR_WFL_LINECOL (id); /* Now we chain the required number of calls to the access$0 to ! get a hold to the enclosing instance we need for a non-static ! field, and then we build the field access. */ ! if (!is_static) ! access = build_access_to_thisn (current_class, decl_ctx, lc); /* If the field is private and we're generating bytecode, then ! we generate an access method. */ ! if (FIELD_PRIVATE (decl) && flag_emit_class_files) { ! tree name = build_nested_field_access_methods (decl); ! access = build_nested_field_access_expr (lc, decl_ctx, ! name, access, NULL_TREE); } ! /* Otherwise we use `access$(this$). ... access$(this$).' ! for non-static fields. Once again we break the `private' access rule from a foreign ! class. */ ! else if (is_static) ! { ! tree class_name = DECL_NAME (TYPE_NAME (decl_ctx)); ! access ! = make_qualified_primary (build_wfl_node (class_name), id, lc); ! } else ! access = make_qualified_primary (access, id, lc); } + return resolve_expression_name (access, NULL); } ! /* Return a nonzero value if DECL describes a member access across nested ! class boundaries. That is, DECL is in a class that either encloses, ! is enclosed by or shares a common enclosing class with the class ! TYPE. */ static int ! nested_member_access_p (tree type, tree decl) { + bool is_static = false; + tree decl_type = DECL_CONTEXT (decl); + tree type_root, decl_type_root; + + if (decl_type == type + || (TREE_CODE (decl) != FIELD_DECL + && TREE_CODE (decl) != VAR_DECL + && TREE_CODE (decl) != FUNCTION_DECL)) + return 0; + if (!INNER_CLASS_TYPE_P (type) ! && !(TREE_CODE (decl_type) == RECORD_TYPE ! && INNER_CLASS_TYPE_P (decl_type))) return 0; ! is_static = (TREE_CODE (decl) == FUNCTION_DECL) ! ? METHOD_STATIC (decl) ! : FIELD_STATIC (decl); ! ! /* If TYPE extends the declaration context of the non-static ! member we're trying to access, then this isn't a nested member ! access we need to worry about. */ ! if (!is_static && inherits_from_p (type, decl_type)) return 0; ! for (type_root = type; ! DECL_CONTEXT (TYPE_NAME (type_root)); ! type_root = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (type_root)))) { ! if (type_root == decl_type) ! return 1; ! } ! if (TREE_CODE (decl_type) == RECORD_TYPE ! && INNER_CLASS_TYPE_P (decl_type)) ! { ! for (decl_type_root = decl_type; ! DECL_CONTEXT (TYPE_NAME (decl_type_root)); ! decl_type_root ! = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (decl_type_root)))) ! { ! if (decl_type_root == type) ! return 1; ! } } + else + decl_type_root = decl_type; + + if (type_root == decl_type_root) + return 1; + + /* Before we give up, see whether it is a non-static field + inherited from the enclosing context we are considering. */ + if (!DECL_CONTEXT (TYPE_NAME (type_root)) + && !is_static + && inherits_from_p (type_root, decl_type)) + return 1; return 0; } ! /* Return a nonzero value if NODE represents a cross-nested-class ! access that has already been expanded. As a side effect, it returns the name of the field being accessed and the argument passed to the access function, suitable for a regeneration of the access method ! call if necessary. */ static int ! nested_field_expanded_access_p (tree node, tree *name, tree *arg_type, ! tree *arg) { int identified = 0; if (TREE_CODE (node) != CALL_EXPR) return 0; ! /* Well, GCJ generates slightly different tree nodes when compiling ! to native or bytecodes. It's the case for function calls. */ if (flag_emit_class_files && TREE_CODE (node) == CALL_EXPR ! && NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0)))) identified = 1; else if (!flag_emit_class_files) { *************** outer_field_expanded_access_p (tree node *** 8462,8468 **** node = TREE_OPERAND (node, 0); if (TREE_OPERAND (node, 0) && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL ! && (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))) identified = 1; } --- 8516,8522 ---- node = TREE_OPERAND (node, 0); if (TREE_OPERAND (node, 0) && TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL ! && (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (TREE_OPERAND (node, 0))))) identified = 1; } *************** outer_field_expanded_access_p (tree node *** 8472,8497 **** { tree argument = TREE_OPERAND (node, 1); *name = DECL_NAME (TREE_OPERAND (node, 0)); ! *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument))); ! *arg = TREE_VALUE (argument); } return identified; } ! /* Detect in NODE an outer field read access from an inner class and ! transform it into a write with RHS as an argument. This function is ! called from the java_complete_lhs when an assignment to a LHS can ! be identified. */ static tree ! outer_field_access_fix (tree wfl, tree node, tree rhs) { tree name, arg_type, arg; ! if (outer_field_expanded_access_p (node, &name, &arg_type, &arg)) { ! node = build_outer_field_access_expr (EXPR_WFL_LINECOL (wfl), ! arg_type, name, arg, rhs); return java_complete_tree (node); } return NULL_TREE; --- 8526,8562 ---- { tree argument = TREE_OPERAND (node, 1); *name = DECL_NAME (TREE_OPERAND (node, 0)); ! ! /* The accessors for static fields do not take in a this$ argument, ! so we take the class name from the accessor's context instead. */ ! if (argument) ! { ! *arg_type = TREE_TYPE (TREE_TYPE (TREE_VALUE (argument))); ! *arg = TREE_VALUE (argument); ! } ! else ! { ! *arg_type = DECL_CONTEXT (TREE_OPERAND (node, 0)); ! *arg = NULL_TREE; ! } } return identified; } ! /* Detect in NODE cross-nested-class field read access and ! transform it into a write with RHS as an argument. This function ! is called from the java_complete_lhs when an assignment to a LHS can ! be identified. */ static tree ! nested_field_access_fix (tree wfl, tree node, tree rhs) { tree name, arg_type, arg; ! if (nested_field_expanded_access_p (node, &name, &arg_type, &arg)) { ! node = build_nested_field_access_expr (EXPR_WFL_LINECOL (wfl), ! arg_type, name, arg, rhs); return java_complete_tree (node); } return NULL_TREE; *************** outer_field_access_fix (tree wfl, tree n *** 8504,8526 **** read access. */ static tree ! build_outer_field_access_expr (int lc, tree type, tree access_method_name, ! tree arg1, tree arg2) { tree args, cn, access; ! args = arg1 ? arg1 : ! build_wfl_node (build_current_thisn (current_class)); ! args = build_tree_list (NULL_TREE, args); if (arg2) ! args = tree_cons (NULL_TREE, arg2, args); ! access = build_method_invocation (build_wfl_node (access_method_name), args); cn = build_wfl_node (DECL_NAME (TYPE_NAME (type))); return make_qualified_primary (cn, access, lc); } static tree build_new_access_id (void) { --- 8569,8602 ---- read access. */ static tree ! build_nested_field_access_expr (int lc, tree type, tree access_method_name, ! tree arg1, tree arg2) { tree args, cn, access; ! if (arg1) ! args = build_tree_list (NULL_TREE, arg1); ! else ! args = NULL_TREE; if (arg2) ! { ! if (args) ! args = tree_cons (NULL_TREE, arg2, args); ! else ! args = build_tree_list (NULL_TREE, arg2); ! } ! access ! = build_method_invocation (build_wfl_node (access_method_name), args); cn = build_wfl_node (DECL_NAME (TYPE_NAME (type))); + return make_qualified_primary (cn, access, lc); } + /* Build the name of a synthetic accessor used to access class members + across nested class boundaries. */ + static tree build_new_access_id (void) { *************** build_new_access_id (void) *** 8531,8538 **** return get_identifier (buffer); } ! /* Create the static access functions for the outer field DECL. We define a ! read: TREE_TYPE () access$ (DECL_CONTEXT () inst$) { return inst$.field; } --- 8607,8614 ---- return get_identifier (buffer); } ! /* Create the static access functions for the cross-nested-class field DECL. ! We define a read: TREE_TYPE () access$ (DECL_CONTEXT () inst$) { return inst$.field; } *************** build_new_access_id (void) *** 8541,8603 **** TREE_TYPE () value$) { return inst$.field = value$; } ! We should have a usage flags on the DECL so we can lazily turn the ones ! we're using for code generation. FIXME. */ static tree ! build_outer_field_access_methods (tree decl) { ! tree id, args, stmt, mdecl; ! if (FIELD_INNER_ACCESS_P (decl)) ! return FIELD_INNER_ACCESS (decl); MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl); ! /* Create the identifier and a function named after it. */ id = build_new_access_id (); /* The identifier is marked as bearing the name of a generated write ! access function for outer field accessed from inner classes. */ ! OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1; ! /* Create the read access */ ! args = build_tree_list (inst_id, build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); stmt = build_return (0, stmt); ! mdecl = build_outer_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, args, stmt); DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; ! /* Create the write access method. No write access for final variable */ if (!FIELD_FINAL (decl)) { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (TREE_CHAIN (args)) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt, build_wfl_node (wpv_id))); ! mdecl = build_outer_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, ! args, stmt); } DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; /* Return the access name */ ! return FIELD_INNER_ACCESS (decl) = id; } ! /* Build an field access method NAME. */ static tree ! build_outer_field_access_method (tree class, tree type, tree name, ! tree args, tree body) { tree saved_current_function_decl, mdecl; --- 8617,8705 ---- TREE_TYPE () value$) { return inst$.field = value$; } ! For static fields, these methods are generated without the instance ! parameter. ! We should have a usage flag on the DECL so we can lazily turn the ones ! we're using for code generation. FIXME. */ static tree ! build_nested_field_access_methods (tree decl) { ! tree id, args, stmt, mdecl, class_name = NULL_TREE; ! bool is_static = FIELD_STATIC (decl); ! if (FIELD_NESTED_ACCESS_P (decl)) ! return FIELD_NESTED_ACCESS (decl); MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl); ! /* Create the identifier and a function named after it. */ id = build_new_access_id (); /* The identifier is marked as bearing the name of a generated write ! access function for outer field accessed from inner classes. */ ! NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1; ! /* Create the read access. */ ! if (!is_static) ! { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), 0); ! } ! else ! { ! args = end_params_node; ! class_name = DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))); ! stmt = make_qualified_primary (build_wfl_node (class_name), ! build_wfl_node (DECL_NAME (decl)), 0); ! } stmt = build_return (0, stmt); ! mdecl = build_nested_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, args, stmt); DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; ! /* Create the write access method. No write access for final variable */ if (!FIELD_FINAL (decl)) { ! if (!is_static) ! { ! args = build_tree_list (inst_id, ! build_pointer_type (DECL_CONTEXT (decl))); ! TREE_CHAIN (args) = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (TREE_CHAIN (args)) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (inst_id), ! build_wfl_node (DECL_NAME (decl)), ! 0); ! } ! else ! { ! args = build_tree_list (wpv_id, TREE_TYPE (decl)); ! TREE_CHAIN (args) = end_params_node; ! stmt = make_qualified_primary (build_wfl_node (class_name), ! build_wfl_node (DECL_NAME (decl)), ! 0); ! } stmt = build_return (0, build_assignment (ASSIGN_TK, 0, stmt, build_wfl_node (wpv_id))); ! mdecl = build_nested_field_access_method (DECL_CONTEXT (decl), ! TREE_TYPE (decl), id, ! args, stmt); } DECL_FUNCTION_ACCESS_DECL (mdecl) = decl; /* Return the access name */ ! return FIELD_NESTED_ACCESS (decl) = id; } ! /* Build a field access method NAME. */ static tree ! build_nested_field_access_method (tree class, tree type, tree name, ! tree args, tree body) { tree saved_current_function_decl, mdecl; *************** build_outer_field_access_method (tree cl *** 8618,8627 **** /* This section deals with building access function necessary for ! certain kinds of method invocation from inner classes. */ static tree ! build_outer_method_access_method (tree decl) { tree saved_current_function_decl, mdecl; tree args = NULL_TREE, call_args = NULL_TREE; --- 8720,8729 ---- /* This section deals with building access function necessary for ! certain kinds of method invocation across nested class boundaries. */ static tree ! build_nested_method_access_method (tree decl) { tree saved_current_function_decl, mdecl; tree args = NULL_TREE, call_args = NULL_TREE; *************** build_outer_method_access_method (tree d *** 8641,8647 **** /* Obtain an access identifier and mark it */ id = build_new_access_id (); ! OUTER_FIELD_ACCESS_IDENTIFIER_P (id) = 1; carg = TYPE_ARG_TYPES (TREE_TYPE (decl)); /* Create the arguments, as much as the original */ --- 8743,8749 ---- /* Obtain an access identifier and mark it */ id = build_new_access_id (); ! NESTED_FIELD_ACCESS_IDENTIFIER_P (id) = 1; carg = TYPE_ARG_TYPES (TREE_TYPE (decl)); /* Create the arguments, as much as the original */ *************** build_outer_method_access_method (tree d *** 8670,8677 **** start_artificial_method_body (mdecl); /* The actual method invocation uses the same args. When invoking a ! static methods that way, we don't want to skip the first ! argument. */ carg = args; if (!METHOD_STATIC (decl)) carg = TREE_CHAIN (carg); --- 8772,8778 ---- start_artificial_method_body (mdecl); /* The actual method invocation uses the same args. When invoking a ! static methods that way, we don't want to skip the first argument. */ carg = args; if (!METHOD_STATIC (decl)) carg = TREE_CHAIN (carg); *************** build_outer_method_access_method (tree d *** 8690,8699 **** end_artificial_method_body (mdecl); current_function_decl = saved_current_function_decl; ! /* Back tag the access function so it know what it accesses */ DECL_FUNCTION_ACCESS_DECL (decl) = mdecl; ! /* Tag the current method so it knows it has an access generated */ return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl; } --- 8791,8800 ---- end_artificial_method_body (mdecl); current_function_decl = saved_current_function_decl; ! /* Back tag the access function so it know what it accesses. */ DECL_FUNCTION_ACCESS_DECL (decl) = mdecl; ! /* Tag the current method so it knows it has an access generated. */ return DECL_FUNCTION_INNER_ACCESS (decl) = mdecl; } *************** build_outer_method_access_method (tree d *** 8707,8713 **** others. Access methods to this$ are build on the fly if necessary. This CAN'T be used to solely access this$ from this$ (which alway yield to special cases and optimization, see ! for example build_outer_field_access). */ static tree build_access_to_thisn (tree from, tree to, int lc) --- 8808,8814 ---- others. Access methods to this$ are build on the fly if necessary. This CAN'T be used to solely access this$ from this$ (which alway yield to special cases and optimization, see ! for example build_nested_field_access). */ static tree build_access_to_thisn (tree from, tree to, int lc) *************** resolve_expression_name (tree id, tree * *** 9512,9526 **** /* If we're processing an inner class and we're trying to access a field belonging to an outer class, build ! the access to the field */ ! if (!fs && outer_field_access_p (current_class, decl)) { ! if (CLASS_STATIC (TYPE_NAME (current_class))) { static_ref_err (id, DECL_NAME (decl), current_class); return error_mark_node; } ! access = build_outer_field_access (id, decl); if (orig) *orig = access; return access; --- 9613,9634 ---- /* If we're processing an inner class and we're trying to access a field belonging to an outer class, build ! the access to the field. ! As usual, we have to treat initialized static final ! variables as a special case. */ ! if (nested_member_access_p (current_class, decl) ! && ! (JDECL_P (decl) && CLASS_FINAL_VARIABLE_P (decl) ! && DECL_INITIAL (decl) != NULL_TREE ! && (JSTRING_TYPE_P (TREE_TYPE (decl)) ! || JNUMERIC_TYPE_P (TREE_TYPE (decl))) ! && TREE_CONSTANT (DECL_INITIAL (decl)))) { ! if (!fs && CLASS_STATIC (TYPE_NAME (current_class))) { static_ref_err (id, DECL_NAME (decl), current_class); return error_mark_node; } ! access = build_nested_field_access (id, decl); if (orig) *orig = access; return access; *************** resolve_qualified_expression_name (tree *** 10054,10071 **** decl = QUAL_RESOLUTION (q); if (!type) { ! if (TREE_CODE (decl) == FIELD_DECL && !FIELD_STATIC (decl)) { ! if (current_this) ! *where_found = current_this; ! else ! { ! static_ref_err (qual_wfl, DECL_NAME (decl), ! current_class); ! return 1; ! } ! if (outer_field_access_p (current_class, decl)) ! decl = build_outer_field_access (qual_wfl, decl); } else { --- 10162,10190 ---- decl = QUAL_RESOLUTION (q); if (!type) { ! if (TREE_CODE (decl) == FIELD_DECL ! || TREE_CODE (decl) == VAR_DECL) { ! if (TREE_CODE (decl) == FIELD_DECL ! && !FIELD_STATIC (decl)) ! { ! if (current_this) ! *where_found = current_this; ! else ! { ! static_ref_err (qual_wfl, DECL_NAME (decl), ! current_class); ! return 1; ! } ! } ! else ! { ! *where_found = TREE_TYPE (decl); ! if (TREE_CODE (*where_found) == POINTER_TYPE) ! *where_found = TREE_TYPE (*where_found); ! } ! if (nested_member_access_p (current_class, decl)) ! decl = build_nested_field_access (qual_wfl, decl); } else { *************** resolve_qualified_expression_name (tree *** 10174,10180 **** } from_cast = from_super = 0; ! /* It's an access from a type but it isn't static, we make it relative to `this'. */ if (!is_static && from_type) decl = current_this; --- 10293,10299 ---- } from_cast = from_super = 0; ! /* If it's an access from a type but isn't static, we make it relative to `this'. */ if (!is_static && from_type) decl = current_this; *************** resolve_qualified_expression_name (tree *** 10189,10196 **** return 1; } ! /* We want to keep the location were found it, and the type ! we found. */ *where_found = decl; *type_found = type; --- 10308,10315 ---- return 1; } ! /* We want to keep the location where we found it, and the ! type we found. */ *where_found = decl; *type_found = type; *************** resolve_qualified_expression_name (tree *** 10198,10207 **** qualified this */ if (from_qualified_this) { ! field_decl = build_outer_field_access (qual_wfl, field_decl); from_qualified_this = 0; } /* This is the decl found and eventually the next one to search from */ decl = field_decl; --- 10317,10334 ---- qualified this */ if (from_qualified_this) { ! field_decl ! = build_nested_field_access (qual_wfl, field_decl); from_qualified_this = 0; } + /* If needed, generate accessors for static field access. */ + if (is_static + && FIELD_PRIVATE (field_decl) + && flag_emit_class_files + && nested_member_access_p (current_class, field_decl)) + field_decl = build_nested_field_access (qual_wfl, field_decl); + /* This is the decl found and eventually the next one to search from */ decl = field_decl; *************** check_deprecation (tree wfl, tree decl) *** 10370,10406 **** /* Returns 1 if class was declared in the current package, 0 otherwise */ - static GTY(()) tree cicp_cache; static int class_in_current_package (tree class) { ! int qualified_flag; ! tree left; ! ! if (cicp_cache == class) ! return 1; ! ! qualified_flag = QUALIFIED_P (DECL_NAME (TYPE_NAME (class))); ! ! /* If the current package is empty and the name of CLASS is ! qualified, class isn't in the current package. If there is a ! current package and the name of the CLASS is not qualified, class ! isn't in the current package */ ! if ((!ctxp->package && qualified_flag) || (ctxp->package && !qualified_flag)) ! return 0; ! ! /* If there is not package and the name of CLASS isn't qualified, ! they belong to the same unnamed package */ ! if (!ctxp->package && !qualified_flag) return 1; - - /* Compare the left part of the name of CLASS with the package name */ - split_qualified_name (&left, NULL, DECL_NAME (TYPE_NAME (class))); - if (ctxp->package == left) - { - cicp_cache = class; - return 1; - } return 0; } --- 10497,10507 ---- /* Returns 1 if class was declared in the current package, 0 otherwise */ static int class_in_current_package (tree class) { ! if (TYPE_PACKAGE (current_class) == TYPE_PACKAGE (class)) return 1; return 0; } *************** patch_method_invocation (tree patch, tre *** 10499,10514 **** IDENTIFIER_POINTER (name)); PATCH_METHOD_RETURN_ERROR (); } ! if (list && !METHOD_STATIC (list)) { ! char *fct_name = xstrdup (lang_printable_name (list, 2)); ! parse_error_context ! (identifier_wfl, ! "Can't make static reference to method %<%s %s%> in class %qs", ! lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0), ! fct_name, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); ! free (fct_name); ! PATCH_METHOD_RETURN_ERROR (); } } else --- 10600,10621 ---- IDENTIFIER_POINTER (name)); PATCH_METHOD_RETURN_ERROR (); } ! if (list) { ! if (METHOD_STATIC (list)) ! maybe_use_access_method (0, &list, NULL); ! else ! { ! char *fct_name = xstrdup (lang_printable_name (list, 2)); ! parse_error_context ! (identifier_wfl, ! "Can't make static reference to method %<%s %s%> in class %qs", ! lang_printable_name (TREE_TYPE (TREE_TYPE (list)), 0), ! fct_name, ! IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); ! free (fct_name); ! PATCH_METHOD_RETURN_ERROR (); ! } } } else *************** patch_method_invocation (tree patch, tre *** 10625,10631 **** && DECL_NAME (list) == get_identifier ("clone")) is_array_clone_call = 1; ! /* Check for static reference if non static methods */ if (check_for_static_method_reference (wfl, patch, list, class_to_search, primary)) PATCH_METHOD_RETURN_ERROR (); --- 10732,10738 ---- && DECL_NAME (list) == get_identifier ("clone")) is_array_clone_call = 1; ! /* Check for static reference of non static methods. */ if (check_for_static_method_reference (wfl, patch, list, class_to_search, primary)) PATCH_METHOD_RETURN_ERROR (); *************** patch_method_invocation (tree patch, tre *** 10645,10652 **** } /* Non static methods are called with the current object extra ! argument. If patch a `new TYPE()', the argument is the value ! returned by the object allocator. If method is resolved as a primary, use the primary otherwise use the current THIS. */ args = nreverse (args); if (TREE_CODE (patch) != NEW_CLASS_EXPR) --- 10752,10759 ---- } /* Non static methods are called with the current object extra ! argument. If PATCH is a `new TYPE()', the argument is the value ! returned by the object allocator. If method is resolved as a primary, use the primary otherwise use the current THIS. */ args = nreverse (args); if (TREE_CODE (patch) != NEW_CLASS_EXPR) *************** patch_method_invocation (tree patch, tre *** 10658,10673 **** 1) We're not generating bytecodes: ! - LIST is non static. It's invocation is transformed from x(a1,...,an) into this$.x(a1,....an). ! - LIST is static. It's invocation is transformed from x(a1,...,an) into TYPE_OF(this$).x(a1,....an) 2) We're generating bytecodes: ! - LIST is non static. It's invocation is transformed from x(a1,....,an) into access$(this$,a1,...,an). ! - LIST is static. It's invocation is transformed from x(a1,....,an) into TYPE_OF(this$).x(a1,....an). Of course, this$ can be arbitrarily complex, ranging from --- 10765,10780 ---- 1) We're not generating bytecodes: ! - LIST is non-static. Its invocation is transformed from x(a1,...,an) into this$.x(a1,....an). ! - LIST is static. Its invocation is transformed from x(a1,...,an) into TYPE_OF(this$).x(a1,....an) 2) We're generating bytecodes: ! - LIST is non-static. Its invocation is transformed from x(a1,....,an) into access$(this$,a1,...,an). ! - LIST is static. Its invocation is transformed from x(a1,....,an) into TYPE_OF(this$).x(a1,....an). Of course, this$ can be arbitrarily complex, ranging from *************** patch_method_invocation (tree patch, tre *** 10676,10685 **** maybe_use_access_method returns a nonzero value if the this_arg has to be moved into the (then generated) stub ! argument list. In the meantime, the selected function ! might have be replaced by a generated stub. */ ! if (!primary && ! maybe_use_access_method (is_super_init, &list, &this_arg)) { args = tree_cons (NULL_TREE, this_arg, args); this_arg = NULL_TREE; /* So it doesn't get chained twice */ --- 10783,10794 ---- maybe_use_access_method returns a nonzero value if the this_arg has to be moved into the (then generated) stub ! argument list. In the meantime, the selected function ! might have been replaced by a generated stub. */ ! if (METHOD_STATIC (list)) ! maybe_use_access_method (0, &list, NULL); ! else if (!primary && ! maybe_use_access_method (is_super_init, &list, &this_arg)) { args = tree_cons (NULL_TREE, this_arg, args); this_arg = NULL_TREE; /* So it doesn't get chained twice */ *************** check_for_static_method_reference (tree *** 10847,10854 **** return 0; } ! /* Fix the invocation of *MDECL if necessary in the case of a ! invocation from an inner class. *THIS_ARG might be modified appropriately and an alternative access to *MDECL might be returned. */ --- 10956,10963 ---- return 0; } ! /* Fix the invocation of *MDECL if necessary in the case of an ! invocation across a nested class. *THIS_ARG might be modified appropriately and an alternative access to *MDECL might be returned. */ *************** static int *** 10856,10880 **** maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) { tree ctx; ! tree md = *mdecl, ta = *this_arg; int to_return = 0; int non_static_context = !METHOD_STATIC (md); if (is_super_init - || DECL_CONTEXT (md) == current_class - || !PURE_INNER_CLASS_TYPE_P (current_class) || DECL_FINIT_P (md) ! || DECL_INSTINIT_P (md)) return 0; /* If we're calling a method found in an enclosing class, generate ! what it takes to retrieve the right this. Don't do that if we're ! invoking a static method. Note that if MD's type is unrelated to CURRENT_CLASS, then the current this can be used. */ if (non_static_context ! && !inherits_from_p (current_class, DECL_CONTEXT (md))) { ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); if (inherits_from_p (ctx, DECL_CONTEXT (md))) { --- 10965,10990 ---- maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) { tree ctx; ! tree md = *mdecl, ta = NULL_TREE; int to_return = 0; int non_static_context = !METHOD_STATIC (md); if (is_super_init || DECL_FINIT_P (md) ! || DECL_INSTINIT_P (md) ! || !nested_member_access_p (current_class, md)) return 0; /* If we're calling a method found in an enclosing class, generate ! what it takes to retrieve the right `this'. Don't do that if we're ! invoking a static method. Note that if MD's type is unrelated to CURRENT_CLASS, then the current this can be used. */ if (non_static_context ! && !inherits_from_p (current_class, DECL_CONTEXT (md)) ! && DECL_CONTEXT (TYPE_NAME (current_class))) { + ta = *this_arg; ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); if (inherits_from_p (ctx, DECL_CONTEXT (md))) { *************** maybe_use_access_method (int is_super_in *** 10900,10915 **** } /* We might have to use an access method to get to MD. We can ! break the method access rule as far as we're not generating ! bytecode */ if (METHOD_PRIVATE (md) && flag_emit_class_files) { ! md = build_outer_method_access_method (md); to_return = 1; } *mdecl = md; ! *this_arg = ta; /* Returning a nonzero value indicates we were doing a non static method invocation that is now a static invocation. It will have --- 11010,11026 ---- } /* We might have to use an access method to get to MD. We can ! break the method access rule as long as we're not generating ! bytecode. */ if (METHOD_PRIVATE (md) && flag_emit_class_files) { ! md = build_nested_method_access_method (md); to_return = 1; } *mdecl = md; ! if (this_arg) ! *this_arg = ta; /* Returning a nonzero value indicates we were doing a non static method invocation that is now a static invocation. It will have *************** lookup_method_invoke (int lc, tree cl, t *** 11134,11139 **** --- 11245,11261 ---- /* And promoted */ if (TREE_CODE (current_arg) == RECORD_TYPE) current_arg = promote_type (current_arg); + /* If we're building an anonymous constructor call, and one of + the arguments has array type, cast it to a size-less array + type. This prevents us from getting a strange gcj-specific + "sized array" signature in the constructor's signature. */ + if (lc && ANONYMOUS_CLASS_P (class) + && TREE_CODE (current_arg) == POINTER_TYPE + && TYPE_ARRAY_P (TREE_TYPE (current_arg))) + { + tree elt = TYPE_ARRAY_ELEMENT (TREE_TYPE (current_arg)); + current_arg = build_pointer_type (build_java_array_type (elt, -1)); + } atl = tree_cons (NULL_TREE, current_arg, atl); } *************** java_complete_lhs (tree node) *** 11748,11755 **** /* First, the case expression must be constant. Values of final fields are accepted. */ cn = fold (cn); ! if ((TREE_CODE (cn) == COMPOUND_EXPR || TREE_CODE (cn) == COMPONENT_REF) && JDECL_P (TREE_OPERAND (cn, 1)) && FIELD_FINAL (TREE_OPERAND (cn, 1)) && DECL_INITIAL (TREE_OPERAND (cn, 1))) --- 11870,11882 ---- /* First, the case expression must be constant. Values of final fields are accepted. */ + nn = fold_constant_for_init (cn, NULL_TREE); + if (nn != NULL_TREE) + cn = nn; + cn = fold (cn); ! if ((TREE_CODE (cn) == COMPOUND_EXPR ! || TREE_CODE (cn) == COMPONENT_REF) && JDECL_P (TREE_OPERAND (cn, 1)) && FIELD_FINAL (TREE_OPERAND (cn, 1)) && DECL_INITIAL (TREE_OPERAND (cn, 1))) *************** java_complete_lhs (tree node) *** 12191,12200 **** if ((nn = patch_string (TREE_OPERAND (node, 1)))) TREE_OPERAND (node, 1) = nn; ! if ((nn = outer_field_access_fix (wfl_op1, TREE_OPERAND (node, 0), ! TREE_OPERAND (node, 1)))) { ! /* We return error_mark_node if outer_field_access_fix detects we write into a final. */ if (nn == error_mark_node) return error_mark_node; --- 12318,12327 ---- if ((nn = patch_string (TREE_OPERAND (node, 1)))) TREE_OPERAND (node, 1) = nn; ! if ((nn = nested_field_access_fix (wfl_op1, TREE_OPERAND (node, 0), ! TREE_OPERAND (node, 1)))) { ! /* We return error_mark_node if nested_field_access_fix detects we write into a final. */ if (nn == error_mark_node) return error_mark_node; *************** java_complete_lhs (tree node) *** 12268,12274 **** TREE_OPERAND (node, 1) = nn; } ! return patch_binop (node, wfl_op1, wfl_op2); case INSTANCEOF_EXPR: wfl_op1 = TREE_OPERAND (node, 0); --- 12395,12401 ---- TREE_OPERAND (node, 1) = nn; } ! return patch_binop (node, wfl_op1, wfl_op2, 0); case INSTANCEOF_EXPR: wfl_op1 = TREE_OPERAND (node, 0); *************** java_complete_lhs (tree node) *** 12278,12284 **** TREE_TYPE (node) = boolean_type_node; return node; } ! return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1)); case UNARY_PLUS_EXPR: case NEGATE_EXPR: --- 12405,12411 ---- TREE_TYPE (node) = boolean_type_node; return node; } ! return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1), 0); case UNARY_PLUS_EXPR: case NEGATE_EXPR: *************** java_refold (tree t) *** 13413,13419 **** of remaining nodes and detects more errors in certain cases. */ static tree ! patch_binop (tree node, tree wfl_op1, tree wfl_op2) { tree op1 = TREE_OPERAND (node, 0); tree op2 = TREE_OPERAND (node, 1); --- 13540,13546 ---- of remaining nodes and detects more errors in certain cases. */ static tree ! patch_binop (tree node, tree wfl_op1, tree wfl_op2, int folding) { tree op1 = TREE_OPERAND (node, 0); tree op2 = TREE_OPERAND (node, 1); *************** patch_binop (tree node, tree wfl_op1, tr *** 13595,13610 **** build_int_cst (NULL_TREE, 0x3f))); /* The >>> operator is a >> operating on unsigned quantities */ ! if (code == URSHIFT_EXPR && ! flag_emit_class_files) { tree to_return; tree utype = java_unsigned_type (prom_type); op1 = convert (utype, op1); ! TREE_SET_CODE (node, RSHIFT_EXPR); ! TREE_OPERAND (node, 0) = op1; ! TREE_OPERAND (node, 1) = op2; ! TREE_TYPE (node) = utype; ! to_return = convert (prom_type, node); /* Copy the original value of the COMPOUND_ASSIGN_P flag */ COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node); TREE_SIDE_EFFECTS (to_return) --- 13722,13735 ---- build_int_cst (NULL_TREE, 0x3f))); /* The >>> operator is a >> operating on unsigned quantities */ ! if (code == URSHIFT_EXPR && (folding || ! flag_emit_class_files)) { tree to_return; tree utype = java_unsigned_type (prom_type); op1 = convert (utype, op1); ! ! to_return = fold (build2 (RSHIFT_EXPR, utype, op1, op2)); ! to_return = convert (prom_type, to_return); /* Copy the original value of the COMPOUND_ASSIGN_P flag */ COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node); TREE_SIDE_EFFECTS (to_return) *************** patch_unaryop (tree node, tree wfl_op) *** 14226,14232 **** tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); tree prom_type = NULL_TREE, value, decl; ! int outer_field_flag = 0; int code = TREE_CODE (node); int error_found = 0; --- 14351,14357 ---- tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); tree prom_type = NULL_TREE, value, decl; ! int nested_field_flag = 0; int code = TREE_CODE (node); int error_found = 0; *************** patch_unaryop (tree node, tree wfl_op) *** 14243,14252 **** /* 15.14.2 Prefix Decrement Operator -- */ case PREDECREMENT_EXPR: op = decl = extract_field_decl (op); ! outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL); /* We might be trying to change an outer field accessed using access method. */ ! if (outer_field_flag) { /* Retrieve the decl of the field we're trying to access. We do that by first retrieving the function we would call to --- 14368,14378 ---- /* 15.14.2 Prefix Decrement Operator -- */ case PREDECREMENT_EXPR: op = decl = extract_field_decl (op); ! nested_field_flag ! = nested_field_expanded_access_p (op, NULL, NULL, NULL); /* We might be trying to change an outer field accessed using access method. */ ! if (nested_field_flag) { /* Retrieve the decl of the field we're trying to access. We do that by first retrieving the function we would call to *************** patch_unaryop (tree node, tree wfl_op) *** 14300,14314 **** } /* We remember we might be accessing an outer field */ ! if (outer_field_flag) { /* We re-generate an access to the field */ value = build2 (PLUS_EXPR, TREE_TYPE (op), ! build_outer_field_access (wfl_op, decl), value); /* And we patch the original access$() into a write with plus_op as a rhs */ ! return outer_field_access_fix (node, op, value); } /* And write back into the node. */ --- 14426,14440 ---- } /* We remember we might be accessing an outer field */ ! if (nested_field_flag) { /* We re-generate an access to the field */ value = build2 (PLUS_EXPR, TREE_TYPE (op), ! build_nested_field_access (wfl_op, decl), value); /* And we patch the original access$() into a write with plus_op as a rhs */ ! return nested_field_access_fix (node, op, value); } /* And write back into the node. */ *************** patch_unaryop (tree node, tree wfl_op) *** 14389,14394 **** --- 14515,14526 ---- return value; } break; + + case NOP_EXPR: + /* This can only happen when the type is already known. */ + gcc_assert (TREE_TYPE (node) != NULL_TREE); + prom_type = TREE_TYPE (node); + break; } if (error_found) *************** check_thrown_exceptions ( *** 15903,15909 **** int is_array_call = 0; /* Skip check within generated methods, such as access$. */ ! if (OUTER_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl))) return; if (this_expr != NULL_TREE --- 16035,16041 ---- int is_array_call = 0; /* Skip check within generated methods, such as access$. */ ! if (NESTED_FIELD_ACCESS_IDENTIFIER_P (DECL_NAME (current_function_decl))) return; if (this_expr != NULL_TREE *************** fold_constant_for_init (tree node, tree *** 16201,16213 **** if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 1) = val; ! return patch_binop (node, op0, op1); case UNARY_PLUS_EXPR: case NEGATE_EXPR: case TRUTH_NOT_EXPR: case BIT_NOT_EXPR: case CONVERT_EXPR: op0 = TREE_OPERAND (node, 0); val = fold_constant_for_init (op0, context); if (val == NULL_TREE || ! TREE_CONSTANT (val)) --- 16333,16346 ---- if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 1) = val; ! return patch_binop (node, op0, op1, 1); case UNARY_PLUS_EXPR: case NEGATE_EXPR: case TRUTH_NOT_EXPR: case BIT_NOT_EXPR: case CONVERT_EXPR: + case NOP_EXPR: op0 = TREE_OPERAND (node, 0); val = fold_constant_for_init (op0, context); if (val == NULL_TREE || ! TREE_CONSTANT (val)) *************** fold_constant_for_init (tree node, tree *** 16233,16240 **** if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 2) = val; ! return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 1) ! : TREE_OPERAND (node, 2); case VAR_DECL: case FIELD_DECL: --- 16366,16373 ---- if (val == NULL_TREE || ! TREE_CONSTANT (val)) return NULL_TREE; TREE_OPERAND (node, 2) = val; ! return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 2) ! : TREE_OPERAND (node, 1); case VAR_DECL: case FIELD_DECL: diff -Nrcpad gcc-4.0.2/gcc/java/zextract.c gcc-4.0.3/gcc/java/zextract.c *** gcc-4.0.2/gcc/java/zextract.c Sat Jul 24 00:03:28 2004 --- gcc-4.0.3/gcc/java/zextract.c Mon Oct 24 17:22:41 2005 *************** *** 1,7 **** /* Handle a .class file embedded in a .zip archive. This extracts a member from a .zip file, but does not handle uncompression (since that is not needed for classes.zip). ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. --- 1,7 ---- /* Handle a .class file embedded in a .zip archive. This extracts a member from a .zip file, but does not handle uncompression (since that is not needed for classes.zip). ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. *************** read_zip_archive (ZipFile *zipf) *** 287,292 **** --- 287,311 ---- return -1; if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4) return -2; + if (buffer[0] != 'P' + || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3)) + { + /* We could not find the end-central-header signature, probably + because a zipfile comment is present. Scan backwards until we + find the signature. */ + if (lseek (zipf->fd, (long)(-ECREC_SIZE), SEEK_END) <= 0) + return -2; + while (buffer[0] != 'P' + || strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3)) + { + if (lseek (zipf->fd, -5, SEEK_CUR) < 0) + return -2; + if (read (zipf->fd, buffer, 4) != 4) + return -2; + } + if (read (zipf->fd, buffer + 4, ECREC_SIZE) != ECREC_SIZE) + return -2; + } zipf->count = makeword((const uch *) &buffer[TOTAL_ENTRIES_CENTRAL_DIR]); zipf->dir_size = makelong((const uch *) &buffer[SIZE_CENTRAL_DIRECTORY]); #define ALLOC xmalloc diff -Nrcpad gcc-4.0.2/libffi/.cvsignore gcc-4.0.3/libffi/.cvsignore *** gcc-4.0.2/libffi/.cvsignore Tue Jun 15 07:42:07 2004 --- gcc-4.0.3/libffi/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/libffi/ChangeLog gcc-4.0.3/libffi/ChangeLog *** gcc-4.0.2/libffi/ChangeLog Wed Sep 21 03:57:52 2005 --- gcc-4.0.3/libffi/ChangeLog Thu Mar 9 20:45:28 2006 *************** *** 1,3 **** --- 1,17 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + + 2005-09-30 Tom Tromey + + PR libffi/24148 + * testsuite/libffi.call/float1.c (value_type): New typedef. + (CANARY): New define. + (main): Check for result buffer overflow. + * src/powerpc/linux64.S: Handle linux64 long double returns. + * src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant. + (ffi_prep_cif_machdep): Handle linux64 long double returns. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/ffi.c gcc-4.0.3/libffi/src/powerpc/ffi.c *** gcc-4.0.2/libffi/src/powerpc/ffi.c Thu Aug 25 00:56:36 2005 --- gcc-4.0.3/libffi/src/powerpc/ffi.c Fri Sep 30 16:14:25 2005 *************** enum { *** 44,49 **** --- 44,50 ---- FLAG_RETURNS_NOTHING = 1 << (31-30), /* These go in cr7 */ FLAG_RETURNS_FP = 1 << (31-29), FLAG_RETURNS_64BITS = 1 << (31-28), + FLAG_RETURNS_128BITS = 1 << (31-27), FLAG_ARG_NEEDS_COPY = 1 << (31- 7), FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ *************** ffi_status ffi_prep_cif_machdep(ffi_cif *** 532,537 **** --- 533,544 ---- /* else fall through. */ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: + if (type == FFI_TYPE_LONGDOUBLE && cif->abi == FFI_LINUX64) + { + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; + } #endif intarg_count++; flags |= FLAG_RETVAL_REFERENCE; diff -Nrcpad gcc-4.0.2/libffi/src/powerpc/linux64.S gcc-4.0.3/libffi/src/powerpc/linux64.S *** gcc-4.0.2/libffi/src/powerpc/linux64.S Thu Sep 2 21:07:21 2004 --- gcc-4.0.3/libffi/src/powerpc/linux64.S Fri Sep 30 16:14:25 2005 *************** ffi_call_LINUX64: *** 120,128 **** blr .Lfp_return_value: bf 28, .Lfloat_return_value stfd %f1, 0(%r30) ! stfd %f2, 8(%r30) /* It might be a long double */ b .Ldone_return_value .Lfloat_return_value: stfs %f1, 0(%r30) --- 120,132 ---- blr .Lfp_return_value: + bt 27, .Lfd_return_value bf 28, .Lfloat_return_value stfd %f1, 0(%r30) ! b .Ldone_return_value ! .Lfd_return_value: ! stfd %f1, 0(%r30) ! stfd %f2, 8(%r30) b .Ldone_return_value .Lfloat_return_value: stfs %f1, 0(%r30) diff -Nrcpad gcc-4.0.2/libffi/testsuite/libffi.call/float1.c gcc-4.0.3/libffi/testsuite/libffi.call/float1.c *** gcc-4.0.2/libffi/testsuite/libffi.call/float1.c Thu Sep 4 14:47:48 2003 --- gcc-4.0.3/libffi/testsuite/libffi.call/float1.c Fri Sep 30 16:14:25 2005 *************** *** 8,13 **** --- 8,21 ---- #include "ffitest.h" #include "float.h" + typedef union + { + double d; + unsigned char c[sizeof (double)]; + } value_type; + + #define CANARY 0xba + static double dblit(float f) { return f/3.0; *************** int main (void) *** 19,26 **** ffi_type *args[MAX_ARGS]; void *values[MAX_ARGS]; float f; ! double d; ! args[0] = &ffi_type_float; values[0] = &f; --- 27,34 ---- ffi_type *args[MAX_ARGS]; void *values[MAX_ARGS]; float f; ! value_type result[2]; ! int i; args[0] = &ffi_type_float; values[0] = &f; *************** int main (void) *** 31,41 **** f = 3.14159; ! ffi_call(&cif, FFI_FN(dblit), &d, values); /* These are not always the same!! Check for a reasonable delta */ ! CHECK(d - dblit(f) < DBL_EPSILON); exit(0); --- 39,57 ---- f = 3.14159; ! /* Put a canary in the return array. This is a regression test for ! a buffer overrun. */ ! memset(result[1].c, CANARY, sizeof (double)); ! ! ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); /* These are not always the same!! Check for a reasonable delta */ ! CHECK(result[0].d - dblit(f) < DBL_EPSILON); ! ! /* Check the canary. */ ! for (i = 0; i < sizeof (double); ++i) ! CHECK(result[1].c[i] == CANARY); exit(0); diff -Nrcpad gcc-4.0.2/libjava/.cvsignore gcc-4.0.3/libjava/.cvsignore *** gcc-4.0.2/libjava/.cvsignore Mon Aug 23 23:51:56 2004 --- gcc-4.0.3/libjava/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/libjava/ChangeLog gcc-4.0.3/libjava/ChangeLog *** gcc-4.0.2/libjava/ChangeLog Wed Sep 21 03:58:07 2005 --- gcc-4.0.3/libjava/ChangeLog Thu Mar 9 20:45:52 2006 *************** *** 1,3 **** --- 1,249 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + + 2006-03-07 fexx + + PR libgcj/26351: + * gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Free + 'addrs' if it is set. + + 2006-02-06 Tom Tromey + + * gnu/java/rmi/registry/RegistryImpl.java (version): Use 2006. + * gnu/gcj/tools/gcj_dbtool/Main.java (main): Use 2006. + * gij.cc (version): Use 2006. + * gnu/gcj/convert/Convert.java (version): Use 2006. + * gnu/java/rmi/rmic/RMIC.java (parseOptions): Use 2006. + + 2006-01-23 Tom Tromey + + * java/sql/Date.java (toString): Not deprecated. + (valueOf): Likewise. + * java/sql/Time.java (valueOf): Not deprecated. + (toString): Likewise. + + 2006-01-21 Matthias Klose + + * java/lang/mprec.h: Fix typo in previous patch. + + 2006-01-21 Matthias Klose + + Backport: + 2005-09-15 Tom Tromey + Workaround for PR classpath/23863: + * java/lang/mprec.h (MAX_BIGNUM_WDS): Define as 128 on + non-Pack_32 platforms. + + 2006-01-19 H.J. Lu + + PR libgcj/25840 + * include/x86_64-signal.h (RESTORE2): Add ".text\n". + + 2006-01-04 Krister Walfridsson + + * posix-threads.cc (_Jv_InitThreads): #ifdef PTHREAD_STACK_MIN + + 2005-12-28 John David Anglin + + * sysdep/pa/locks.h (compare_and_swap): Add ldcw semaphore to make + operation atomic. + + 2005-12-18 Anthony Green + + * gnu/java/net/natPlainDatagramSocketImplPosix.cc (getLocalAddress): + New helper function. + (setOption): Use getLocalAddress. Don't downcast value to + InetAddress. + (getOption): Use getLocalAddress. + + 2005-12-16 Tom Tromey + + * testsuite/libjava.jacks/jacks.xfail + (8.5.2-accessible-static-member-usage-3): Removed. + + 2005-12-15 Tom Tromey + + * testsuite/libjava.compile/rh175833.java: New file. + * testsuite/libjava.compile/pr25429.java: New file. + + 2005-12-05 Tom Tromey + + * testsuite/libjava.compile/rh174912.java: New file. + + 2005-11-29 Tom Tromey + + PR java/18278: + * testsuite/libjava.jni/pr18278.out: New file. + * testsuite/libjava.jni/pr18278.c: New file. + * testsuite/libjava.jni/pr18278.java: New file. + * include/jvm.h (_Jv_UnwrapJNIweakReference): Declare. + * jni.cc (_Jv_UnwrapJNIweakReference): New function. + (call): Unwrap return value if needed. + + 2005-11-25 Andrew Haley + + PR libgcj/25016 + * posix-threads.cc (_Jv_CondWait): Rewrite calculation of the + struct timespec we pass to pthread_cond_timedwait. + + 2005-11-24 Bryce McKinlay + + * gij.cc (nonstandard_opts_help): Add entry for -Xss. + + 2005-11-21 Matthias Klose + + * configure.ac: Fix typo in error message. + * configure: Regenerate. + + 2005-11-17 Bryce McKinlay + + Implement -Xss. + * include/jvm.h (gcj::stack_size): Declare. + (_Jv_StackSize): Declare. + * posix-threads.cc (_Jv_InitThreads): Validate gcj::stack_size. + (_Jv_ThreadStart): Set stack size if specified. + * prims.cc (gcj::stack_size): Define. + (parse_memory_size): Renamed from parse_heap_size. + (_Jv_SetStackSize): Parse stack size argument and set gcj::stack_size. + + 2005-11-10 Andrew Haley + + Patch from GNU Classpath 2005-06-01 + * java/util/Calendar: (setTimeInMillis): Recompute time fields. + + 2005-11-10 Tom Tromey + + * gnu/gcj/runtime/SystemClassLoader.java (init): Clear + last_was_sep in loop. + + 2005-11-09 Tom Tromey + + * testsuite/libjava.jacks/jacks.xfail (non-jls-zip-2): Now + passes. + + 2005-11-08 Tom Tromey + + PR libgcj/23763. From aeby@graeff.com. + * java/lang/natPosixProcess.cc (nativeSpawn): Unblock SIGCHLD + before exec. + + 2005-11-08 Andrew Haley + + * gnu/java/rmi/rmic/CompilerProcess.java: Use a new thread to + handle stdout from the child process. + + 2005-10-31 Tom Tromey + + PR libgcj/14358, libgcj/24552: + * gnu/gcj/convert/IOConverter.java: Regenerate aliases. Add + aliases for 'euc_jp' and 'eucjp'. + * scripts/encodings.pl: Recognize 'none', not 'NONE'. Include + canonical names in output. + (%map): Added UnicodeLittle and UnicodeBig. + + 2005-10-17 Andrew Haley + + * Merge from Classpath head: + + 2005-09-16 Andrew Haley + + * java/io/ObjectStreamClass.java (findAccessibleMethod): Allow + protected readResolve(). Rewrite accessibility check. + + 2005-07-07 Jeroen Frijters + + * java/io/ObjectStreamClass.java + (findAccessibleMethod): Added code to make method accessible. + + 2005-07-03 Daniel Bonniot + + * java/io/ObjectStreamClass.java (inSamePackage): New private method. + (findAccessibleMethod): Likewise. + (cacheMethods): Lookup readResolve and writeReplace using the new + findAccessibleMethod(). + + 2005-10-12 Andrew Haley + + PR java/24251 + * link.cc (ensure_method_table_complete): Install Miranda methods + for interfaces too. + + 2005-10-12 Bryce McKinlay + + * testsuite/libjava.lang/pr13107_2.xfail: Remove xfail. + * testsuite/libjava.lang/pr13107_3.xfail: Likewise. + + 2005-10-12 Andreas Tobler + + * testsuite/libjava.jacks/jacks.xfail: Remove 15.21-assoc-7, + 15.21-assoc-8, 15.21-equal-3, 15.28-string-11. + + 2005-10-12 Tom Tromey + + PR java/21540, PR java/13788: + * testsuite/libjava.compile/pr21540.java: New file. + * testsuite/libjava.compile/pr13788.java: New file. + * testsuite/libjava.jacks/jacks.xfail: Updated. + + 2005-10-10 Matthias Klose + + * Makefile.am (Makefile.deps): Don't use non-standardized escape + sequences in echo command. + * Makefile.in: Regenerate. + + 2005-10-05 Ranjit Mathew + + More testsuite adjustments for PR java/19870. + * testsuite/libjava.lang/PR19870_2.java: New testcase. + * testsuite/libjava.lang/PR19870_2.out: Expected output for the + new testcase. + * testsuite/libjava.jacks/jacks.xfail: Remove + 8.5.2-non-static-member-usage-2 and add + 15.12.3-explicit-constructor-9. + + 2005-10-05 Tom Tromey + + PR java/21844: + * testsuite/libjava.lang/pr21844.java: New file. + * testsuite/libjava.lang/pr21844.out: New file. + + 2005-10-05 Ranjit Mathew + + Testsuite adjustments for PR java/19870. + * testsuite/libjava.lang/PR19870.java: New testcase. + * testsuite/libjava.lang/PR19870.out: Expected output for the + testcase. + * testsuite/libjava.jacks/jacks.xfail: Add + 8.5.2-accessible-static-member-usage-3 and 15.8.4-static-2 + + 2005-10-01 Bryce McKinlay + + * testsuite/libjava.jacks/jacks.xfail: Update to reflect + PR java/23891 fix. + + 2005-10-01 Bryce McKinlay + + * gnu/gcj/runtime/BootClassLoader.java (BootClassLoader): Pass + `null' parent ClassLoader to parent constructor. + * gnu/gcj/runtime/HelperClassLoader.java (HelperClassLoader): New + constructor. + + 2005-09-30 Tom Tromey + + Workaround for PR libgcj/23367: + * java/lang/natClass.cc (_Jv_FindMethodInCache): Disable. + (_Jv_AddMethodToCache): Likewise. + (method_cache): Remove. + (MCACHE_SIZE): Likewise. + (struct _Jv_mcache): Likewise. + + 2005-09-30 Andrew Haley + + * java/net/URLClassLoader.java: (addURLImpl): Synchronize on the + loader. + (toString): Likewise. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/libjava/Makefile.am gcc-4.0.3/libjava/Makefile.am *** gcc-4.0.2/libjava/Makefile.am Wed Aug 17 12:56:34 2005 --- gcc-4.0.3/libjava/Makefile.am Mon Oct 10 01:12:14 2005 *************** EXTRA_DIST = $(all_java_source_files) *** 267,274 **** # recompiles to native code. Makefile.deps: $(srcdir)/Makefile.in @: $(call write_entries_to_file,$(all_java_source_files),files.tmplist) ! echo 's,^\(.*\)/\([^/]*\)\.java$$,\1.list: &\' > tmpsed ! echo '\1/\2.class: \1.stamp,' >> tmpsed sed -ftmpsed files.tmplist > Makefile.deps rm files.tmplist tmpsed --- 267,274 ---- # recompiles to native code. Makefile.deps: $(srcdir)/Makefile.in @: $(call write_entries_to_file,$(all_java_source_files),files.tmplist) ! echo 's,^\(.*\)/\([^/]*\)\.java$$,@1.list: &\' | sed 's/@/\\/g' > tmpsed ! echo '@1/@2.class: @1.stamp,' | sed 's/@/\\/g' >> tmpsed sed -ftmpsed files.tmplist > Makefile.deps rm files.tmplist tmpsed diff -Nrcpad gcc-4.0.2/libjava/Makefile.in gcc-4.0.3/libjava/Makefile.in *** gcc-4.0.2/libjava/Makefile.in Wed Sep 28 06:16:38 2005 --- gcc-4.0.3/libjava/Makefile.in Thu Mar 9 20:48:40 2006 *************** uninstall-info: uninstall-info-recursive *** 6154,6161 **** # recompiles to native code. Makefile.deps: $(srcdir)/Makefile.in @: $(call write_entries_to_file,$(all_java_source_files),files.tmplist) ! echo 's,^\(.*\)/\([^/]*\)\.java$$,\1.list: &\' > tmpsed ! echo '\1/\2.class: \1.stamp,' >> tmpsed sed -ftmpsed files.tmplist > Makefile.deps rm files.tmplist tmpsed --- 6154,6161 ---- # recompiles to native code. Makefile.deps: $(srcdir)/Makefile.in @: $(call write_entries_to_file,$(all_java_source_files),files.tmplist) ! echo 's,^\(.*\)/\([^/]*\)\.java$$,@1.list: &\' | sed 's/@/\\/g' > tmpsed ! echo '@1/@2.class: @1.stamp,' | sed 's/@/\\/g' >> tmpsed sed -ftmpsed files.tmplist > Makefile.deps rm files.tmplist tmpsed diff -Nrcpad gcc-4.0.2/libjava/configure gcc-4.0.3/libjava/configure *** gcc-4.0.2/libjava/configure Wed Sep 28 06:16:38 2005 --- gcc-4.0.3/libjava/configure Thu Mar 9 20:48:40 2006 *************** for peer in $peerlibs ; do *** 7931,7937 **** ;; gtk) if test "$no_x" = yes; then ! echo "*** xlib peers requested but no X library available" 1>&2 exit 1 else use_gtk_awt=yes --- 7931,7937 ---- ;; gtk) if test "$no_x" = yes; then ! echo "*** gtk peers requested but no X library available" 1>&2 exit 1 else use_gtk_awt=yes diff -Nrcpad gcc-4.0.2/libjava/configure.ac gcc-4.0.3/libjava/configure.ac *** gcc-4.0.2/libjava/configure.ac Wed Aug 17 12:56:57 2005 --- gcc-4.0.3/libjava/configure.ac Mon Nov 21 09:31:50 2005 *************** for peer in $peerlibs ; do *** 514,520 **** ;; gtk) if test "$no_x" = yes; then ! echo "*** xlib peers requested but no X library available" 1>&2 exit 1 else use_gtk_awt=yes --- 514,520 ---- ;; gtk) if test "$no_x" = yes; then ! echo "*** gtk peers requested but no X library available" 1>&2 exit 1 else use_gtk_awt=yes diff -Nrcpad gcc-4.0.2/libjava/gcj/.cvsignore gcc-4.0.3/libjava/gcj/.cvsignore *** gcc-4.0.2/libjava/gcj/.cvsignore Thu Oct 10 05:21:53 2002 --- gcc-4.0.3/libjava/gcj/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - stamp-h2.in --- 0 ---- diff -Nrcpad gcc-4.0.2/libjava/gij.cc gcc-4.0.3/libjava/gij.cc *** gcc-4.0.2/libjava/gij.cc Fri Sep 9 01:25:02 2005 --- gcc-4.0.3/libjava/gij.cc Mon Feb 6 22:36:57 2006 *************** *** 1,4 **** ! /* Copyright (C) 1999-2005 Free Software Foundation This file is part of libgcj. --- 1,4 ---- ! /* Copyright (C) 1999-2006 Free Software Foundation This file is part of libgcj. *************** version () *** 42,48 **** { printf ("java version \"" JV_VERSION "\"\n"); printf ("gij (GNU libgcj) version %s\n\n", __VERSION__); ! printf ("Copyright (C) 2005 Free Software Foundation, Inc.\n"); printf ("This is free software; see the source for copying conditions. There is NO\n"); printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); } --- 42,48 ---- { printf ("java version \"" JV_VERSION "\"\n"); printf ("gij (GNU libgcj) version %s\n\n", __VERSION__); ! printf ("Copyright (C) 2006 Free Software Foundation, Inc.\n"); printf ("This is free software; see the source for copying conditions. There is NO\n"); printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); } *************** nonstandard_opts_help () *** 52,57 **** --- 52,58 ---- { printf (" -Xms set initial heap size\n"); printf (" -Xmx set maximum heap size\n"); + printf (" -Xss set thread stack size\n"); exit (0); } diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/convert/Convert.java gcc-4.0.3/libjava/gnu/gcj/convert/Convert.java *** gcc-4.0.2/libjava/gnu/gcj/convert/Convert.java Fri Feb 18 20:52:14 2005 --- gcc-4.0.3/libjava/gnu/gcj/convert/Convert.java Mon Feb 6 22:36:57 2006 *************** *** 1,4 **** ! /* Copyright (C) 1999, 2002, 2005 Free Software Foundation This file is part of libgcj. --- 1,4 ---- ! /* Copyright (C) 1999, 2002, 2005, 2006 Free Software Foundation This file is part of libgcj. *************** public class Convert *** 45,51 **** + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright (C) 2005 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); --- 45,51 ---- + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright (C) 2006 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/convert/IOConverter.java gcc-4.0.3/libjava/gnu/gcj/convert/IOConverter.java *** gcc-4.0.2/libjava/gnu/gcj/convert/IOConverter.java Sat Mar 20 00:24:49 2004 --- gcc-4.0.3/libjava/gnu/gcj/convert/IOConverter.java Mon Oct 31 19:42:52 2005 *************** *** 1,4 **** ! /* Copyright (C) 2000, 2001 Free Software Foundation This file is part of libgcj. --- 1,4 ---- ! /* Copyright (C) 2000, 2001, 2005 Free Software Foundation This file is part of libgcj. *************** public abstract class IOConverter *** 28,71 **** // canonical name. hash.put ("iso-latin-1", "8859_1"); hash.put ("iso8859_1", "8859_1"); // On Solaris the default encoding, as returned by nl_langinfo(), // is `646' (aka ASCII), but the Solaris iconv_open() doesn't // understand that. We work around the problem by adding an // explicit alias for Solaris users. hash.put ("646", "ASCII"); // All aliases after this point are automatically generated by the // `encodings.pl' script. Run it to make any corrections. hash.put ("ansi_x3.4-1968", "ASCII"); - hash.put ("iso-ir-6", "ASCII"); hash.put ("ansi_x3.4-1986", "ASCII"); - hash.put ("iso_646.irv:1991", "ASCII"); hash.put ("ascii", "ASCII"); - hash.put ("iso646-us", "ASCII"); - hash.put ("us-ascii", "ASCII"); - hash.put ("us", "ASCII"); - hash.put ("ibm367", "ASCII"); hash.put ("cp367", "ASCII"); hash.put ("csascii", "ASCII"); ! hash.put ("iso_8859-1:1987", "8859_1"); hash.put ("iso-ir-100", "8859_1"); hash.put ("iso_8859-1", "8859_1"); ! hash.put ("iso-8859-1", "8859_1"); ! hash.put ("latin1", "8859_1"); hash.put ("l1", "8859_1"); ! hash.put ("ibm819", "8859_1"); ! hash.put ("cp819", "8859_1"); ! hash.put ("csisolatin1", "8859_1"); ! hash.put ("utf-8", "UTF8"); ! hash.put ("none", "UTF8"); ! hash.put ("shift_jis", "SJIS"); hash.put ("ms_kanji", "SJIS"); ! hash.put ("csshiftjis", "SJIS"); ! hash.put ("extended_unix_code_packed_format_for_japanese", "EUCJIS"); ! hash.put ("cseucpkdfmtjapanese", "EUCJIS"); ! hash.put ("euc-jp", "EUCJIS"); ! hash.put ("euc-jp", "EUCJIS"); ! hash.put ("utf-16le", "UnicodeLittle"); ! hash.put ("utf-16be", "UnicodeBig"); iconv_byte_swap = iconv_init (); } --- 28,80 ---- // canonical name. hash.put ("iso-latin-1", "8859_1"); hash.put ("iso8859_1", "8859_1"); + hash.put ("utf-16le", "UnicodeLittle"); + hash.put ("utf-16be", "UnicodeBig"); + // At least one build script out there uses 'utf8'. + hash.put ("utf8", "UTF8"); // On Solaris the default encoding, as returned by nl_langinfo(), // is `646' (aka ASCII), but the Solaris iconv_open() doesn't // understand that. We work around the problem by adding an // explicit alias for Solaris users. hash.put ("646", "ASCII"); + + // See PR 24552, PR 14358. + hash.put ("euc_jp", "EUCJIS"); + hash.put ("eucjp", "EUCJIS"); + // All aliases after this point are automatically generated by the // `encodings.pl' script. Run it to make any corrections. hash.put ("ansi_x3.4-1968", "ASCII"); hash.put ("ansi_x3.4-1986", "ASCII"); hash.put ("ascii", "ASCII"); hash.put ("cp367", "ASCII"); + hash.put ("cp819", "8859_1"); hash.put ("csascii", "ASCII"); ! hash.put ("cseucpkdfmtjapanese", "EUCJIS"); ! hash.put ("csisolatin1", "8859_1"); ! hash.put ("csshiftjis", "SJIS"); ! hash.put ("euc-jp", "EUCJIS"); ! hash.put ("extended_unix_code_packed_format_for_japanese", "EUCJIS"); ! hash.put ("ibm367", "ASCII"); ! hash.put ("ibm819", "8859_1"); ! hash.put ("iso-8859-1", "8859_1"); hash.put ("iso-ir-100", "8859_1"); + hash.put ("iso-ir-6", "ASCII"); + hash.put ("iso646-us", "ASCII"); + hash.put ("iso_646.irv:1991", "ASCII"); hash.put ("iso_8859-1", "8859_1"); ! hash.put ("iso_8859-1:1987", "8859_1"); hash.put ("l1", "8859_1"); ! hash.put ("latin1", "8859_1"); hash.put ("ms_kanji", "SJIS"); ! hash.put ("shift_jis", "SJIS"); ! hash.put ("us", "ASCII"); ! hash.put ("us-ascii", "ASCII"); ! hash.put ("utf-8", "UTF8"); ! hash.put ("utf16-be", "UnicodeBig"); ! hash.put ("utf16-le", "UnicodeLittle"); ! // End script-generated section. ! iconv_byte_swap = iconv_init (); } diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/runtime/BootClassLoader.java gcc-4.0.3/libjava/gnu/gcj/runtime/BootClassLoader.java *** gcc-4.0.2/libjava/gnu/gcj/runtime/BootClassLoader.java Wed Apr 6 21:38:29 2005 --- gcc-4.0.3/libjava/gnu/gcj/runtime/BootClassLoader.java Sat Oct 1 06:08:28 2005 *************** public final class BootClassLoader exten *** 23,28 **** --- 23,31 ---- { BootClassLoader(String libdir) { + // The BootClassLoader is the top of the delegation chain. It does not + // have a parent. + super((ClassLoader) null); addDirectoriesFromProperty("java.endorsed.dirs"); addDirectoriesFromProperty("gnu.gcj.runtime.endorsed.dirs"); diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/runtime/HelperClassLoader.java gcc-4.0.3/libjava/gnu/gcj/runtime/HelperClassLoader.java *** gcc-4.0.2/libjava/gnu/gcj/runtime/HelperClassLoader.java Wed Apr 6 21:38:29 2005 --- gcc-4.0.3/libjava/gnu/gcj/runtime/HelperClassLoader.java Sat Oct 1 06:08:28 2005 *************** class HelperClassLoader extends URLClass *** 25,30 **** --- 25,35 ---- { super(new URL[0]); } + + HelperClassLoader(ClassLoader parent) + { + super(new URL[0], parent); + } /** * This is a helper method that adds all the jar and zip files from diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/runtime/SystemClassLoader.java gcc-4.0.3/libjava/gnu/gcj/runtime/SystemClassLoader.java *** gcc-4.0.2/libjava/gnu/gcj/runtime/SystemClassLoader.java Fri May 13 20:25:02 2005 --- gcc-4.0.3/libjava/gnu/gcj/runtime/SystemClassLoader.java Fri Nov 11 00:43:12 2005 *************** public final class SystemClassLoader ext *** 52,57 **** --- 52,58 ---- continue; } + last_was_sep = false; File path = new File(e); // Ignore invalid paths. if (!path.exists()) diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/runtime/natStackTrace.cc gcc-4.0.3/libjava/gnu/gcj/runtime/natStackTrace.cc *** gcc-4.0.2/libjava/gnu/gcj/runtime/natStackTrace.cc Mon Oct 18 14:07:42 2004 --- gcc-4.0.3/libjava/gnu/gcj/runtime/natStackTrace.cc Tue Mar 7 17:07:37 2006 *************** *** 1,6 **** // natStackTrace.cc - native helper methods for Throwable ! /* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc This file is part of libgcj. --- 1,6 ---- // natStackTrace.cc - native helper methods for Throwable ! /* Copyright (C) 2000, 2002, 2003, 2006 Free Software Foundation, Inc This file is part of libgcj. *************** gnu::gcj::runtime::StackTrace::fillInSta *** 118,123 **** --- 118,125 ---- else frame = NULL; + if (addrs != NULL) + _Jv_Free (addrs); addrs = reinterpret_cast (frame); #else // HAVE_BACKTRACE (void)maxlen; diff -Nrcpad gcc-4.0.2/libjava/gnu/gcj/tools/gcj_dbtool/Main.java gcc-4.0.3/libjava/gnu/gcj/tools/gcj_dbtool/Main.java *** gcc-4.0.2/libjava/gnu/gcj/tools/gcj_dbtool/Main.java Wed Apr 6 14:59:19 2005 --- gcc-4.0.3/libjava/gnu/gcj/tools/gcj_dbtool/Main.java Mon Feb 6 22:36:57 2006 *************** *** 1,4 **** ! /* Copyright (C) 2004, 2005 Free Software Foundation This file is part of libgcj. --- 1,4 ---- ! /* Copyright (C) 2004, 2005, 2006 Free Software Foundation This file is part of libgcj. *************** public class Main *** 46,52 **** + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright 2005 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); return; --- 46,52 ---- + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright 2006 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); return; diff -Nrcpad gcc-4.0.2/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc gcc-4.0.3/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc *** gcc-4.0.2/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc Tue Feb 1 19:22:47 2005 --- gcc-4.0.3/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc Mon Dec 19 03:03:18 2005 *************** *** 1,4 **** ! /* Copyright (C) 2003 Free Software Foundation This file is part of libgcj. --- 1,4 ---- ! /* Copyright (C) 2003, 2005 Free Software Foundation This file is part of libgcj. *************** gnu::java::net::PlainDatagramSocketImpl: *** 429,437 **** { // FIXME: implement use of NetworkInterface - union McastReq u; jbyteArray haddress = inetaddr->addr; jbyte *bytes = elements (haddress); int len = haddress->length; int level, opname; const char *ptr; --- 429,440 ---- { // FIXME: implement use of NetworkInterface jbyteArray haddress = inetaddr->addr; + #if HAVE_STRUCT_IP_MREQ || HAVE_STRUCT_IPV6_MREQ + union McastReq u; jbyte *bytes = elements (haddress); + #endif + int len = haddress->length; int level, opname; const char *ptr; *************** gnu::java::net::PlainDatagramSocketImpl: *** 482,487 **** --- 485,522 ---- throw new ::java::io::IOException (JvNewStringUTF (strerr)); } + // Helper function to get the InetAddress for a given socket (file + // descriptor). + static ::java::net::InetAddress * + getLocalAddress (int native_fd) + { + jbyteArray laddr; + union SockAddr u; + socklen_t addrlen = sizeof(u); + + if (::getsockname (native_fd, (sockaddr*) &u, &addrlen) != 0) + { + char* strerr = strerror (errno); + throw new ::java::net::SocketException (JvNewStringUTF (strerr)); + } + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } + #ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } + #endif + else + throw new ::java::net::SocketException (JvNewStringUTF ("invalid family")); + + return new ::java::net::InetAddress (laddr, NULL); + } + void gnu::java::net::PlainDatagramSocketImpl::setOption (jint optID, ::java::lang::Object *value) *************** gnu::java::net::PlainDatagramSocketImpl: *** 602,609 **** return; case _Jv_IP_MULTICAST_LOOP_ : ! haddress = ((::java::net::InetAddress *) value)->addr; ! len = haddress->length; if (len == 4) { level = IPPROTO_IP; --- 637,646 ---- return; case _Jv_IP_MULTICAST_LOOP_ : ! // cache the local address ! if (localAddress == NULL) ! localAddress = getLocalAddress (native_fd); ! len = localAddress->addr->length; if (len == 4) { level = IPPROTO_IP; *************** gnu::java::net::PlainDatagramSocketImpl: *** 647,654 **** { int val; socklen_t val_len = sizeof(val); - union SockAddr u; - socklen_t addrlen = sizeof(u); int level, opname; switch (optID) --- 684,689 ---- *************** gnu::java::net::PlainDatagramSocketImpl: *** 694,720 **** case _Jv_SO_BINDADDR_: // cache the local address if (localAddress == NULL) ! { ! jbyteArray laddr; ! if (::getsockname (native_fd, (sockaddr*) &u, &addrlen) != 0) ! goto error; ! if (u.address.sin_family == AF_INET) ! { ! laddr = JvNewByteArray (4); ! memcpy (elements (laddr), &u.address.sin_addr, 4); ! } ! #ifdef HAVE_INET6 ! else if (u.address.sin_family == AF_INET6) ! { ! laddr = JvNewByteArray (16); ! memcpy (elements (laddr), &u.address6.sin6_addr, 16); ! } ! #endif ! else ! throw new ::java::net::SocketException ( ! JvNewStringUTF ("invalid family")); ! localAddress = new ::java::net::InetAddress (laddr, NULL); ! } return localAddress; break; case _Jv_SO_REUSEADDR_ : --- 729,735 ---- case _Jv_SO_BINDADDR_: // cache the local address if (localAddress == NULL) ! localAddress = getLocalAddress (native_fd); return localAddress; break; case _Jv_SO_REUSEADDR_ : *************** gnu::java::net::PlainDatagramSocketImpl: *** 758,786 **** case _Jv_IP_MULTICAST_LOOP_ : // cache the local address ! if (localAddress == NULL) ! { ! jbyteArray laddr; ! if (::getsockname (native_fd, (sockaddr*) &u, &addrlen) != 0) ! goto error; ! if (u.address.sin_family == AF_INET) ! { ! laddr = JvNewByteArray (4); ! memcpy (elements (laddr), &u.address.sin_addr, 4); ! } ! #ifdef HAVE_INET6 ! else if (u.address.sin_family == AF_INET6) ! { ! laddr = JvNewByteArray (16); ! memcpy (elements (laddr), &u.address6.sin6_addr, 16); ! } ! #endif ! else ! throw new ::java::net::SocketException ( ! JvNewStringUTF ("invalid family")); ! localAddress = new ::java::net::InetAddress (laddr, NULL); ! ! } if (localAddress->addr->length == 4) { level = IPPROTO_IP; --- 773,779 ---- case _Jv_IP_MULTICAST_LOOP_ : // cache the local address ! localAddress = getLocalAddress (native_fd); if (localAddress->addr->length == 4) { level = IPPROTO_IP; diff -Nrcpad gcc-4.0.2/libjava/gnu/java/rmi/registry/RegistryImpl.java gcc-4.0.3/libjava/gnu/java/rmi/registry/RegistryImpl.java *** gcc-4.0.2/libjava/gnu/java/rmi/registry/RegistryImpl.java Fri Feb 18 20:52:15 2005 --- gcc-4.0.3/libjava/gnu/java/rmi/registry/RegistryImpl.java Mon Feb 6 22:36:57 2006 *************** *** 1,5 **** /* ! Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. --- 1,5 ---- /* ! Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. *************** public static void version() { *** 110,116 **** + System.getProperty("java.vm.name") + ") " + System.getProperty("java.vm.version")); ! System.out.println("Copyright 2005 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); --- 110,116 ---- + System.getProperty("java.vm.name") + ") " + System.getProperty("java.vm.version")); ! System.out.println("Copyright 2006 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); diff -Nrcpad gcc-4.0.2/libjava/gnu/java/rmi/rmic/CompilerProcess.java gcc-4.0.3/libjava/gnu/java/rmi/rmic/CompilerProcess.java *** gcc-4.0.2/libjava/gnu/java/rmi/rmic/CompilerProcess.java Mon May 31 09:17:33 2004 --- gcc-4.0.3/libjava/gnu/java/rmi/rmic/CompilerProcess.java Tue Nov 8 13:29:12 2005 *************** public abstract class CompilerProcess ex *** 89,98 **** String[] args = computeArguments (name); Process p = Runtime.getRuntime ().exec (args); ! /* Print compiler output to System.out. */ ! InputStream procin = p.getInputStream(); ! for (int ch = procin.read(); ch != -1; ch = procin.read()) ! System.out.print((char) ch); /* Collect compiler error output in a buffer. * If compilation fails, it will be used for an error message. --- 89,115 ---- String[] args = computeArguments (name); Process p = Runtime.getRuntime ().exec (args); ! /* Print compiler output to System.out. Do this asynchronously so ! that the compiler never blocks writing to its stderr. */ ! { ! final InputStream procin = p.getInputStream(); ! final Thread copier = new Thread() ! { ! public void run() ! { ! try ! { ! for (int ch = procin.read(); ch != -1; ch = procin.read()) ! System.out.print((char) ch); ! } ! catch (java.io.IOException _) ! { ! } ! } ! }; ! ! copier.start(); ! } /* Collect compiler error output in a buffer. * If compilation fails, it will be used for an error message. diff -Nrcpad gcc-4.0.2/libjava/gnu/java/rmi/rmic/RMIC.java gcc-4.0.3/libjava/gnu/java/rmi/rmic/RMIC.java *** gcc-4.0.2/libjava/gnu/java/rmi/rmic/RMIC.java Fri Feb 18 20:52:15 2005 --- gcc-4.0.3/libjava/gnu/java/rmi/rmic/RMIC.java Mon Feb 6 22:36:57 2006 *************** *** 1,5 **** /* RMIC.java -- ! Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. --- 1,5 ---- /* RMIC.java -- ! Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. *************** public class RMIC *** 978,984 **** System.out.println("rmic (" + System.getProperty("java.vm.name") + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright 2005 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); --- 978,984 ---- System.out.println("rmic (" + System.getProperty("java.vm.name") + ") " + System.getProperty("java.vm.version")); System.out.println(); ! System.out.println("Copyright 2006 Free Software Foundation, Inc."); System.out.println("This is free software; see the source for copying conditions. There is NO"); System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); System.exit(0); diff -Nrcpad gcc-4.0.2/libjava/include/.cvsignore gcc-4.0.3/libjava/include/.cvsignore *** gcc-4.0.2/libjava/include/.cvsignore Thu Oct 10 05:21:53 2002 --- gcc-4.0.3/libjava/include/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - stamp-h1.in --- 0 ---- diff -Nrcpad gcc-4.0.2/libjava/include/jvm.h gcc-4.0.3/libjava/include/jvm.h *** gcc-4.0.2/libjava/include/jvm.h Wed Aug 17 22:08:16 2005 --- gcc-4.0.3/libjava/include/jvm.h Tue Dec 6 02:13:54 2005 *************** namespace gcj *** 247,252 **** --- 247,255 ---- /* When true, enable the bytecode verifier and BC-ABI verification. */ extern bool verifyClasses; + + /* Thread stack size specified by the -Xss runtime argument. */ + extern size_t stack_size; } // This class handles all aspects of class preparation and linking. *************** void _Jv_SetInitialHeapSize (const char *** 373,378 **** --- 376,385 ---- _Jv_GCSetMaximumHeapSize. */ void _Jv_SetMaximumHeapSize (const char *arg); + /* Set the stack size for threads. Parses ARG, a number which can + optionally have "k" or "m" appended. */ + void _Jv_SetStackSize (const char *arg); + extern "C" void JvRunMain (jclass klass, int argc, const char **argv); void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar); *************** extern "C" void _Jv_RegisterClasses_Coun *** 462,467 **** --- 469,476 ---- extern "C" void _Jv_RegisterResource (void *vptr); extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*); + extern "C" jobject _Jv_UnwrapJNIweakReference (jobject); + extern jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader); extern jclass _Jv_FindClassFromSignature (char *, diff -Nrcpad gcc-4.0.2/libjava/include/x86_64-signal.h gcc-4.0.3/libjava/include/x86_64-signal.h *** gcc-4.0.2/libjava/include/x86_64-signal.h Sun Feb 8 17:35:51 2004 --- gcc-4.0.3/libjava/include/x86_64-signal.h Thu Jan 19 14:43:21 2006 *************** while (0) *** 50,55 **** --- 50,56 ---- #define RESTORE2(name, syscall) \ asm \ ( \ + ".text\n" \ ".byte 0 # Yes, this really is necessary\n" \ ".align 16\n" \ "__" #name ":\n" \ diff -Nrcpad gcc-4.0.2/libjava/java/io/ObjectStreamClass.java gcc-4.0.3/libjava/java/io/ObjectStreamClass.java *** gcc-4.0.2/libjava/java/io/ObjectStreamClass.java Tue Feb 22 03:45:18 2005 --- gcc-4.0.3/libjava/java/io/ObjectStreamClass.java Mon Oct 17 12:44:05 2005 *************** General Public License for more details. *** 16,23 **** You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the ! Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ! 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and --- 16,23 ---- You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the ! Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ! 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and *************** outer: *** 486,504 **** return null; } private void cacheMethods() { Method[] methods = forClass().getDeclaredMethods(); readObjectMethod = findMethod(methods, "readObject", new Class[] { ObjectInputStream.class }, Void.TYPE, true); writeObjectMethod = findMethod(methods, "writeObject", new Class[] { ObjectOutputStream.class }, Void.TYPE, true); ! readResolveMethod = findMethod(methods, "readResolve", ! new Class[0], Object.class, false); ! writeReplaceMethod = findMethod(methods, "writeReplace", ! new Class[0], Object.class, false); } private ObjectStreamClass(Class cl) --- 486,552 ---- return null; } + private static boolean inSamePackage(Class c1, Class c2) + { + String name1 = c1.getName(); + String name2 = c2.getName(); + + int id1 = name1.lastIndexOf('.'); + int id2 = name2.lastIndexOf('.'); + + // Handle the default package + if (id1 == -1 || id2 == -1) + return id1 == id2; + + String package1 = name1.substring(0, id1); + String package2 = name2.substring(0, id2); + + return package1.equals(package2); + } + + final static Class[] noArgs = new Class[0]; + + private static Method findAccessibleMethod(String name, Class from) + { + for (Class c = from; c != null; c = c.getSuperclass()) + { + try + { + Method res = c.getDeclaredMethod(name, noArgs); + int mods = res.getModifiers(); + + if (c == from + || Modifier.isProtected(mods) + || Modifier.isPublic(mods) + || (! Modifier.isPrivate(mods) && inSamePackage(c, from))) + { + AccessController.doPrivileged(new SetAccessibleAction(res)); + return res; + } + } + catch (NoSuchMethodException e) + { + } + } + + return null; + } + private void cacheMethods() { Method[] methods = forClass().getDeclaredMethods(); + readObjectMethod = findMethod(methods, "readObject", new Class[] { ObjectInputStream.class }, Void.TYPE, true); writeObjectMethod = findMethod(methods, "writeObject", new Class[] { ObjectOutputStream.class }, Void.TYPE, true); ! ! // readResolve and writeReplace can be in parent classes, as long as they ! // are accessible from this class. ! readResolveMethod = findAccessibleMethod("readResolve", forClass()); ! writeReplaceMethod = findAccessibleMethod("writeReplace", forClass()); } private ObjectStreamClass(Class cl) diff -Nrcpad gcc-4.0.2/libjava/java/lang/mprec.h gcc-4.0.3/libjava/java/lang/mprec.h *** gcc-4.0.2/libjava/java/lang/mprec.h Sat Dec 23 23:38:51 2000 --- gcc-4.0.3/libjava/java/lang/mprec.h Sat Jan 21 12:15:49 2006 *************** extern double rnd_prod(double, double), *** 292,298 **** --- 292,303 ---- #define MAX_BIGNUMS 16 + #ifdef Pack_32 #define MAX_BIGNUM_WDS 32 + #else + /* Note that this is a workaround for */ + #define MAX_BIGNUM_WDS 128 + #endif struct _Jv_Bigint { diff -Nrcpad gcc-4.0.2/libjava/java/lang/natClass.cc gcc-4.0.3/libjava/java/lang/natClass.cc *** gcc-4.0.2/libjava/java/lang/natClass.cc Thu Feb 17 19:17:08 2005 --- gcc-4.0.3/libjava/java/lang/natClass.cc Fri Sep 30 21:03:45 2005 *************** _Jv_LookupDeclaredMethod (jclass klass, *** 913,958 **** return NULL; } - // NOTE: MCACHE_SIZE should be a power of 2 minus one. - #define MCACHE_SIZE 1023 - - struct _Jv_mcache - { - jclass klass; - _Jv_Method *method; - }; - - static _Jv_mcache method_cache[MCACHE_SIZE + 1]; - static void * ! _Jv_FindMethodInCache (jclass klass, ! _Jv_Utf8Const *name, ! _Jv_Utf8Const *signature) { ! int index = name->hash16 () & MCACHE_SIZE; ! _Jv_mcache *mc = method_cache + index; ! _Jv_Method *m = mc->method; ! ! if (mc->klass == klass ! && m != NULL // thread safe check ! && _Jv_equalUtf8Consts (m->name, name) ! && _Jv_equalUtf8Consts (m->signature, signature)) ! return mc->method->ncode; return NULL; } static void ! _Jv_AddMethodToCache (jclass klass, ! _Jv_Method *method) { ! _Jv_MonitorEnter (&java::lang::Class::class$); ! ! int index = method->name->hash16 () & MCACHE_SIZE; ! ! method_cache[index].method = method; ! method_cache[index].klass = klass; ! ! _Jv_MonitorExit (&java::lang::Class::class$); } void * --- 913,932 ---- return NULL; } static void * ! _Jv_FindMethodInCache (jclass, ! _Jv_Utf8Const *, ! _Jv_Utf8Const *) { ! // Disabled due to bugginess. See PR 23367 for details. return NULL; } static void ! _Jv_AddMethodToCache (jclass, ! _Jv_Method *) { ! // Disabled due to bugginess. See PR 23367 for details. } void * diff -Nrcpad gcc-4.0.2/libjava/java/lang/natPosixProcess.cc gcc-4.0.3/libjava/java/lang/natPosixProcess.cc *** gcc-4.0.2/libjava/java/lang/natPosixProcess.cc Tue Sep 14 20:09:31 2004 --- gcc-4.0.3/libjava/java/lang/natPosixProcess.cc Tue Nov 8 20:59:20 2005 *************** *** 1,6 **** // natPosixProcess.cc - Native side of POSIX process code. ! /* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 Free Software Foundation This file is part of libgcj. --- 1,6 ---- // natPosixProcess.cc - Native side of POSIX process code. ! /* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation This file is part of libgcj. *************** java::lang::ConcreteProcess::nativeSpawn *** 345,350 **** --- 345,356 ---- } } + // Make sure that SIGCHLD is unblocked for the new process. + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + sigprocmask (SIG_UNBLOCK, &mask, NULL); + execvp (args[0], args); // Send the parent notification that the exec failed. diff -Nrcpad gcc-4.0.2/libjava/java/net/URLClassLoader.java gcc-4.0.3/libjava/java/net/URLClassLoader.java *** gcc-4.0.2/libjava/java/net/URLClassLoader.java Sat Jun 4 11:27:15 2005 --- gcc-4.0.3/libjava/java/net/URLClassLoader.java Fri Sep 30 15:54:13 2005 *************** public class URLClassLoader extends Secu *** 855,861 **** private void addURLImpl(URL newUrl) { ! synchronized (urlloaders) { if (newUrl == null) return; // Silently ignore... --- 855,861 ---- private void addURLImpl(URL newUrl) { ! synchronized (this) { if (newUrl == null) return; // Silently ignore... *************** public class URLClassLoader extends Secu *** 1086,1092 **** */ public String toString() { ! synchronized (urlloaders) { if (thisString == null) { --- 1086,1092 ---- */ public String toString() { ! synchronized (this) { if (thisString == null) { diff -Nrcpad gcc-4.0.2/libjava/java/sql/Date.java gcc-4.0.3/libjava/java/sql/Date.java *** gcc-4.0.2/libjava/java/sql/Date.java Sat Apr 19 21:17:50 2003 --- gcc-4.0.3/libjava/java/sql/Date.java Mon Jan 23 22:12:26 2006 *************** *** 1,5 **** /* Date.java -- Wrapper around java.util.Date ! Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. --- 1,5 ---- /* Date.java -- Wrapper around java.util.Date ! Copyright (C) 1999, 2000, 2003, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. *************** public class Date extends java.util.Date *** 154,161 **** * * @param str The string to parse. * @return The resulting java.sql.Date value. - * - * @deprecated */ public static Date valueOf (String str) { --- 154,159 ---- *************** public class Date extends java.util.Date *** 178,185 **** * This method returns this date in JDBC format. * * @return This date as a string. - * - * @deprecated */ public String toString() { --- 176,181 ---- diff -Nrcpad gcc-4.0.2/libjava/java/sql/Time.java gcc-4.0.3/libjava/java/sql/Time.java *** gcc-4.0.2/libjava/java/sql/Time.java Sat Apr 19 21:17:50 2003 --- gcc-4.0.3/libjava/java/sql/Time.java Mon Jan 23 22:12:26 2006 *************** *** 1,5 **** /* Time.java -- Wrapper around java.util.Date ! Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. --- 1,5 ---- /* Time.java -- Wrapper around java.util.Date ! Copyright (C) 1999, 2000, 2002, 2003, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. *************** public class Time extends java.util.Date *** 139,146 **** * * @param str The string to parse. * @return The resulting java.sql.Time value. - * - * @deprecated */ public static Time valueOf (String str) { --- 139,144 ---- *************** public class Time extends java.util.Date *** 193,200 **** * This method returns this date in JDBC format. * * @return This date as a string. - * - * @deprecated */ public String toString () { --- 191,196 ---- diff -Nrcpad gcc-4.0.2/libjava/java/util/Calendar.java gcc-4.0.3/libjava/java/util/Calendar.java *** gcc-4.0.2/libjava/java/util/Calendar.java Wed Mar 23 21:36:23 2005 --- gcc-4.0.3/libjava/java/util/Calendar.java Fri Nov 11 10:42:39 2005 *************** public abstract class Calendar implement *** 629,634 **** --- 629,635 ---- clear(); this.time = time; isTimeSet = true; + computeFields(); } /** diff -Nrcpad gcc-4.0.2/libjava/jni.cc gcc-4.0.3/libjava/jni.cc *** gcc-4.0.2/libjava/jni.cc Tue Sep 6 16:03:11 2005 --- gcc-4.0.3/libjava/jni.cc Tue Dec 6 02:13:54 2005 *************** unwrap (T *obj) *** 226,231 **** --- 226,237 ---- return reinterpret_cast (wr->get ()); } + jobject + _Jv_UnwrapJNIweakReference (jobject obj) + { + return unwrap (obj); + } + static jobject JNICALL *************** _Jv_JNIMethod::call (ffi_cif *, void *re *** 2306,2311 **** --- 2312,2324 ---- ret, real_args); #endif + // We might need to unwrap a JNI weak reference here. + if (_this->jni_cif.rtype == &ffi_type_pointer) + { + _Jv_value *val = (_Jv_value *) ret; + val->object_value = unwrap (val->object_value); + } + if (sync != NULL) _Jv_MonitorExit (sync); diff -Nrcpad gcc-4.0.2/libjava/libltdl/.cvsignore gcc-4.0.3/libjava/libltdl/.cvsignore *** gcc-4.0.2/libjava/libltdl/.cvsignore Thu Dec 18 21:18:35 2003 --- gcc-4.0.3/libjava/libltdl/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1,11 **** - .deps - .libs - Makefile - config.status - config.log - conftest* - libtool - *.lo - *.la - stamp-h - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/libjava/libltdl/ChangeLog gcc-4.0.3/libjava/libltdl/ChangeLog *** gcc-4.0.2/libjava/libltdl/ChangeLog Wed Sep 21 03:58:28 2005 --- gcc-4.0.3/libjava/libltdl/ChangeLog Thu Mar 9 20:45:45 2006 *************** *** 1,3 **** --- 1,7 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + 2005-09-20 Release Manager * GCC 4.0.2 released. diff -Nrcpad gcc-4.0.2/libjava/link.cc gcc-4.0.3/libjava/link.cc *** gcc-4.0.2/libjava/link.cc Wed Aug 17 22:08:13 2005 --- gcc-4.0.3/libjava/link.cc Fri Oct 14 11:41:39 2005 *************** _Jv_Linker::add_miranda_methods (jclass *** 1542,1552 **** void _Jv_Linker::ensure_method_table_complete (jclass klass) { ! if (klass->vtable != NULL || klass->isInterface()) return; // We need our superclass to have its own Miranda methods installed. ! wait_for_state (klass->getSuperclass (), JV_STATE_LOADED); // A class might have so-called "Miranda methods". This is a method // that is declared in an interface and not re-declared in an --- 1542,1553 ---- void _Jv_Linker::ensure_method_table_complete (jclass klass) { ! if (klass->vtable != NULL) return; // We need our superclass to have its own Miranda methods installed. ! if (! klass->isInterface()) ! wait_for_state (klass->getSuperclass (), JV_STATE_LOADED); // A class might have so-called "Miranda methods". This is a method // that is declared in an interface and not re-declared in an diff -Nrcpad gcc-4.0.2/libjava/posix-threads.cc gcc-4.0.3/libjava/posix-threads.cc *** gcc-4.0.2/libjava/posix-threads.cc Fri Jul 8 13:56:07 2005 --- gcc-4.0.3/libjava/posix-threads.cc Wed Jan 4 23:36:12 2006 *************** _Jv_CondWait (_Jv_ConditionVariable_t *c *** 92,105 **** return _JV_NOT_OWNER; struct timespec ts; - jlong m, startTime; if (millis > 0 || nanos > 0) { ! startTime = java::lang::System::currentTimeMillis(); ! m = millis + startTime; ! ts.tv_sec = m / 1000; ! ts.tv_nsec = ((m % 1000) * 1000000) + nanos; } _Jv_Thread_t *current = _Jv_ThreadCurrentData (); --- 92,124 ---- return _JV_NOT_OWNER; struct timespec ts; if (millis > 0 || nanos > 0) { ! // Calculate the abstime corresponding to the timeout. ! // Everything is in milliseconds. ! // ! // We use `unsigned long long' rather than jlong because our ! // caller may pass up to Long.MAX_VALUE millis. This would ! // overflow the range of a jlong when added to the current time. ! ! unsigned long long startTime ! = (unsigned long long)java::lang::System::currentTimeMillis(); ! unsigned long long m = (unsigned long long)millis + startTime; ! unsigned long long seconds = m / 1000; ! ! ts.tv_sec = seconds; ! if (ts.tv_sec < 0 || (unsigned long long)ts.tv_sec != seconds) ! { ! // We treat a timeout that won't fit into a struct timespec ! // as a wait forever. ! millis = nanos = 0; ! } ! else ! { ! m %= 1000; ! ts.tv_nsec = m * 1000000 + (unsigned long long)nanos; ! } } _Jv_Thread_t *current = _Jv_ThreadCurrentData (); *************** _Jv_InitThreads (void) *** 311,316 **** --- 330,350 ---- // Block SIGCHLD here to ensure that any non-Java threads inherit the new // signal mask. block_sigchld(); + + // Check/set the thread stack size. + size_t min_ss = 32 * 1024; + + if (sizeof (void *) == 8) + // Bigger default on 64-bit systems. + min_ss *= 2; + + #ifdef PTHREAD_STACK_MIN + if (min_ss < PTHREAD_STACK_MIN) + min_ss = PTHREAD_STACK_MIN; + #endif + + if (gcj::stack_size > 0 && gcj::stack_size < min_ss) + gcj::stack_size = min_ss; } _Jv_Thread_t * *************** _Jv_ThreadStart (java::lang::Thread *thr *** 430,435 **** --- 464,477 ---- pthread_attr_init (&attr); pthread_attr_setschedparam (&attr, ¶m); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + // Set stack size if -Xss option was given. + if (gcj::stack_size > 0) + { + int e = pthread_attr_setstacksize (&attr, gcj::stack_size); + if (e != 0) + JvFail (strerror (e)); + } info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); info->method = meth; diff -Nrcpad gcc-4.0.2/libjava/prims.cc gcc-4.0.3/libjava/prims.cc *** gcc-4.0.2/libjava/prims.cc Fri May 13 20:40:40 2005 --- gcc-4.0.3/libjava/prims.cc Thu Nov 17 19:10:14 2005 *************** namespace gcj *** 926,931 **** --- 926,934 ---- // When true, enable the bytecode verifier and BC-ABI type verification. bool verifyClasses = true; + + // Thread stack size specified by the -Xss runtime argument. + size_t stack_size = 0; } // We accept all non-standard options accepted by Sun's java command, *************** parse_x_arg (char* option_string) *** 1012,1018 **** } else if (! strncmp (option_string, "ss", 2)) { ! // FIXME: set thread stack size } else if (! strcmp (option_string, "X:+UseAltSigs")) { --- 1015,1021 ---- } else if (! strncmp (option_string, "ss", 2)) { ! _Jv_SetStackSize (option_string + 2); } else if (! strcmp (option_string, "X:+UseAltSigs")) { *************** JvRunMain (jclass klass, int argc, const *** 1374,1380 **** // Parse a string and return a heap size. static size_t ! parse_heap_size (const char *spec) { char *end; unsigned long val = strtoul (spec, &end, 10); --- 1377,1383 ---- // Parse a string and return a heap size. static size_t ! parse_memory_size (const char *spec) { char *end; unsigned long val = strtoul (spec, &end, 10); *************** parse_heap_size (const char *spec) *** 1390,1396 **** void _Jv_SetInitialHeapSize (const char *arg) { ! size_t size = parse_heap_size (arg); _Jv_GCSetInitialHeapSize (size); } --- 1393,1399 ---- void _Jv_SetInitialHeapSize (const char *arg) { ! size_t size = parse_memory_size (arg); _Jv_GCSetInitialHeapSize (size); } *************** _Jv_SetInitialHeapSize (const char *arg) *** 1399,1409 **** void _Jv_SetMaximumHeapSize (const char *arg) { ! size_t size = parse_heap_size (arg); _Jv_GCSetMaximumHeapSize (size); } ! void * _Jv_Malloc (jsize size) --- 1402,1417 ---- void _Jv_SetMaximumHeapSize (const char *arg) { ! size_t size = parse_memory_size (arg); _Jv_GCSetMaximumHeapSize (size); } ! void ! _Jv_SetStackSize (const char *arg) ! { ! size_t size = parse_memory_size (arg); ! gcj::stack_size = size; ! } void * _Jv_Malloc (jsize size) diff -Nrcpad gcc-4.0.2/libjava/scripts/encodings.pl gcc-4.0.3/libjava/scripts/encodings.pl *** gcc-4.0.2/libjava/scripts/encodings.pl Tue Jun 26 04:36:47 2001 --- gcc-4.0.3/libjava/scripts/encodings.pl Mon Oct 31 19:42:52 2005 *************** *** 8,14 **** 'ISO_8859-1:1987' => '8859_1', 'UTF-8' => 'UTF8', 'Shift_JIS' => 'SJIS', ! 'Extended_UNIX_Code_Packed_Format_for_Japanese' => 'EUCJIS' ); if ($ARGV[0] eq '') --- 8,16 ---- 'ISO_8859-1:1987' => '8859_1', 'UTF-8' => 'UTF8', 'Shift_JIS' => 'SJIS', ! 'Extended_UNIX_Code_Packed_Format_for_Japanese' => 'EUCJIS', ! 'UTF16-LE' => 'UnicodeLittle', ! 'UTF16-BE' => 'UnicodeBig' ); if ($ARGV[0] eq '') *************** else *** 25,30 **** --- 27,38 ---- $file = $ARGV[0]; } + # Include canonical names in the output. + foreach $key (keys %map) + { + $output{lc ($key)} = $map{$key}; + } + open (INPUT, "< $file") || die "couldn't open $file: $!"; $body = 0; *************** while () *** 50,66 **** $current = $map{$name}; if ($current) { ! print " hash.put (\"$lower\", \"$current\");\n"; } } elsif ($type eq 'Alias:') { # The IANA list has some ugliness. ! if ($name ne '' && $name ne 'NONE' && $current) { ! print " hash.put (\"$lower\", \"$current\");\n"; } } } close (INPUT); --- 58,79 ---- $current = $map{$name}; if ($current) { ! $output{$lower} = $current; } } elsif ($type eq 'Alias:') { # The IANA list has some ugliness. ! if ($name ne '' && $lower ne 'none' && $current) { ! $output{$lower} = $current; } } } close (INPUT); + + foreach $key (sort keys %output) + { + print " hash.put (\"$key\", \"$output{$key}\");\n"; + } diff -Nrcpad gcc-4.0.2/libjava/sysdep/pa/locks.h gcc-4.0.3/libjava/sysdep/pa/locks.h *** gcc-4.0.2/libjava/sysdep/pa/locks.h Fri Mar 19 22:39:10 2004 --- gcc-4.0.3/libjava/sysdep/pa/locks.h Wed Dec 28 17:56:23 2005 *************** *** 1,6 **** ! // locks.h - Thread synchronization primitives. PARISC implementation. ! /* Copyright (C) 2002 Free Software Foundation This file is part of libgcj. --- 1,6 ---- ! // locks.h - Thread synchronization primitives. PA-RISC implementation. ! /* Copyright (C) 2002, 2005 Free Software Foundation This file is part of libgcj. *************** details. */ *** 11,40 **** #ifndef __SYSDEP_LOCKS_H__ #define __SYSDEP_LOCKS_H__ ! typedef size_t obj_addr_t; /* Integer type big enough for object */ ! /* address. */ ! // Atomically replace *addr by new_val if it was initially equal to old. ! // Return true if the comparison succeeded. // Assumed to have acquire semantics, i.e. later memory operations // cannot execute before the compare_and_swap finishes. inline static bool compare_and_swap(volatile obj_addr_t *addr, ! obj_addr_t old, obj_addr_t new_val) { ! /* FIXME: not atomic */ ! obj_addr_t prev; ! if ((prev = *addr) == old) ! { ! *addr = new_val; ! return true; ! } else { ! return false; } } // Set *addr to new_val with release semantics, i.e. making sure --- 11,72 ---- #ifndef __SYSDEP_LOCKS_H__ #define __SYSDEP_LOCKS_H__ ! // Integer type big enough for object address. ! typedef size_t obj_addr_t; ! template ! struct _pa_jv_cas_lock ! { ! static volatile int _S_pa_jv_cas_lock; ! }; ! ! template ! volatile int ! _pa_jv_cas_lock<_Inst>::_S_pa_jv_cas_lock __attribute__ ((aligned (16))) = 1; ! ! // Because of the lack of weak support when using the hpux som ! // linker, we explicitly instantiate the atomicity lock. ! template volatile int _pa_jv_cas_lock<0>::_S_pa_jv_cas_lock; ! ! // Atomically replace *addr by new_val if it was initially equal to old_val. ! // Return true if the comparison is successful. // Assumed to have acquire semantics, i.e. later memory operations // cannot execute before the compare_and_swap finishes. + // The following implementation is atomic but it can deadlock + // (e.g., if a thread dies holding the lock). inline static bool + __attribute__ ((__unused__)) compare_and_swap(volatile obj_addr_t *addr, ! obj_addr_t old_val, obj_addr_t new_val) { ! bool result; ! int tmp; ! volatile int& lock = _pa_jv_cas_lock<0>::_S_pa_jv_cas_lock; ! __asm__ __volatile__ ("ldcw 0(%1),%0\n\t" ! "cmpib,<>,n 0,%0,.+20\n\t" ! "ldw 0(%1),%0\n\t" ! "cmpib,= 0,%0,.-4\n\t" ! "nop\n\t" ! "b,n .-20" ! : "=&r" (tmp) ! : "r" (&lock) ! : "memory"); ! ! if (*addr != old_val) ! result = false; else { ! *addr = new_val; ! result = true; } + + /* Reset lock with PA 2.0 "ordered" store. */ + __asm__ __volatile__ ("stw,ma %1,0(%0)" + : : "r" (&lock), "r" (tmp) : "memory"); + + return result; } // Set *addr to new_val with release semantics, i.e. making sure diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.compile/pr13788.java gcc-4.0.3/libjava/testsuite/libjava.compile/pr13788.java *** gcc-4.0.2/libjava/testsuite/libjava.compile/pr13788.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.compile/pr13788.java Thu Oct 13 01:11:26 2005 *************** *** 0 **** --- 1,8 ---- + class pr13788 { + private static final int DUMMY1 = 1 >>> 1; + + public static void main(String [] args) { + System.out.println(DUMMY1); + } + } + diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.compile/pr21540.java gcc-4.0.3/libjava/testsuite/libjava.compile/pr21540.java *** gcc-4.0.2/libjava/testsuite/libjava.compile/pr21540.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.compile/pr21540.java Thu Oct 13 01:11:26 2005 *************** *** 0 **** --- 1,15 ---- + public class pr21540 + { + public static final long xxx = 555; + + public boolean fn (int v) + { + switch (v) + { + case ((int) xxx >>> 32): + return true; + default: + return false; + } + } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.compile/pr25429.java gcc-4.0.3/libjava/testsuite/libjava.compile/pr25429.java *** gcc-4.0.2/libjava/testsuite/libjava.compile/pr25429.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.compile/pr25429.java Fri Dec 16 17:24:42 2005 *************** *** 0 **** --- 1,13 ---- + public class pr25429 + { + private static final int CONST = 0; + class I { + public void f () { + switch(0) { + case CONST: + } + } + } + + public static void main(String[] args) { } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.compile/rh174912.java gcc-4.0.3/libjava/testsuite/libjava.compile/rh174912.java *** gcc-4.0.2/libjava/testsuite/libjava.compile/rh174912.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.compile/rh174912.java Tue Dec 6 02:17:45 2005 *************** *** 0 **** --- 1,17 ---- + // Derived from Red Hat bugzilla 174912 + // https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=174912 + // The bug is that the anonymous class constructor here will end up + // with a bogus '[3C' in its signature. + + public class rh174912 { + public rh174912(char[][] args) { } + + public Object m() { + return new rh174912(new char[][] { "hi".toCharArray(), + "bob".toCharArray(), + "and joe".toCharArray() }) { + }; + } + + public static void main(String[] args) { } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.compile/rh175833.java gcc-4.0.3/libjava/testsuite/libjava.compile/rh175833.java *** gcc-4.0.2/libjava/testsuite/libjava.compile/rh175833.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.compile/rh175833.java Fri Dec 16 17:24:42 2005 *************** *** 0 **** --- 1,13 ---- + // Follow-on to PR 25429 + public class rh175833 + { + private static final Object CONST = new Object(); + class I { + public Object f () { + // We need an accessor here. + return CONST; + } + } + + public static void main(String[] args) { } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.jacks/jacks.xfail gcc-4.0.3/libjava/testsuite/libjava.jacks/jacks.xfail *** gcc-4.0.2/libjava/testsuite/libjava.jacks/jacks.xfail Wed Aug 17 12:57:01 2005 --- gcc-4.0.3/libjava/testsuite/libjava.jacks/jacks.xfail Fri Dec 16 17:24:42 2005 *************** *** 152,159 **** 15.11.2-syntax-1 15.12.1-syntax-1 15.12.1-type-14 ! 15.12.2.1-accessibility-method-2 ! 15.12.2.1-accessibility-method-4 15.12.2.1-accessibility-method-6 15.12.2.2-ambiguous-10 15.12.2.2-ambiguous-12 --- 152,159 ---- 15.11.2-syntax-1 15.12.1-syntax-1 15.12.1-type-14 ! 15.12.2.1-accessibility-method-3 ! 15.12.2.1-accessibility-method-5 15.12.2.1-accessibility-method-6 15.12.2.2-ambiguous-10 15.12.2.2-ambiguous-12 *************** *** 174,179 **** --- 174,180 ---- 15.12.3-explicit-constructor-4 15.12.3-explicit-constructor-5 15.12.3-explicit-constructor-7 + 15.12.3-explicit-constructor-9 15.12.3-runtime-mode-1 15.12.3-runtime-mode-2 15.12.3-runtime-mode-3 *************** *** 248,256 **** 15.18.1-float-9 15.18.1-valid-1 15.20-2-runtime-1 - 15.21-assoc-7 - 15.21-assoc-8 - 15.21-equal-3 15.25-runtime-1 15.26.2-add-12 15.26.2-and-10 --- 249,254 ---- *************** *** 274,282 **** 15.28-null-1 15.28-null-3 15.28-primitive-15 - 15.28-primitive-16 15.28-primitive-17 - 15.28-primitive-9 15.28-qualified-name-10 15.28-qualified-name-5 15.28-qualified-name-6 --- 272,278 ---- *************** *** 292,300 **** 15.28-simple-namestr-2 15.28-simple-namestr-3 15.28-simple-namestr-4 - 15.28-string-11 15.28-string-15 - 15.28-string-16 15.28-string-17 15.28-string-18 15.28-string-2 --- 288,294 ---- *************** *** 306,311 **** --- 300,306 ---- 15.8.2-type-12 15.8.2-type-13 15.8.2-type-14 + 15.8.4-static-2 15.8.5-field-expression-6 15.8.5-method-expression-8 15.8.5-variable-5 *************** *** 329,334 **** --- 324,330 ---- 15.9.1-qualified-concrete-12 15.9.1-qualified-concrete-14 15.9.1-qualified-concrete-16 + 15.9.1-qualified-concrete-24 15.9.1-qualified-concrete-4 15.9.1-qualified-concrete-5 15.9.1-unqualified-anonymous-12 *************** *** 451,477 **** 5.1.2-btf-1 5.1.2-btf-3 5.1.2-btf-5 - 5.1.2-bti-1 - 5.1.2-bti-3 - 5.1.2-bti-5 - 5.1.2-btl-1 - 5.1.2-btl-3 - 5.1.2-btl-5 - 5.1.2-bts-1 - 5.1.2-bts-2 - 5.1.2-bts-3 - 5.1.2-bts-4 - 5.1.2-bts-5 5.1.2-std-3 5.1.2-std-5 5.1.2-stf-1 5.1.2-stf-3 5.1.2-stf-5 - 5.1.2-sti-1 - 5.1.2-sti-5 - 5.1.2-stl-1 - 5.1.2-stl-3 - 5.1.2-stl-5 6.3-1 6.5.1-type-15 6.5.1-type-16 --- 447,457 ---- *************** *** 629,635 **** 8.5-inheritance-2 8.5-inheritance-3 8.5-inheritance-6 - 8.5.2-non-static-member-usage-2 8.5.2-non-static-member-usage-4 8.5.2-non-static-member-usage-5 8.6-abrupt-1 --- 609,614 ---- *************** non-jls-jsr41.4-loop-3 *** 713,716 **** non-jls-jsr41.4-loop-7 non-jls-jsr41.4-loop-8 non-jls-jsr41.4-loop-9 - non-jls-zip-2 --- 692,694 ---- diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.c gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.c *** gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.c Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.c Tue Dec 6 02:13:54 2005 *************** *** 0 **** --- 1,10 ---- + #include + #include + + #include "pr18278.h" + + jobject Java_pr18278_weakRef(JNIEnv *env, jclass cls, jobject data) + { + jobject r = (* env)->NewWeakGlobalRef(env, data); + return r; + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.java gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.java *** gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.java Tue Dec 6 02:13:54 2005 *************** *** 0 **** --- 1,13 ---- + public class pr18278 { + public pr18278() {} + + public static void main(String[] args) { + System.loadLibrary("pr18278"); + String bob = "Bob"; + Object o = weakRef("Bob"); + System.out.println(o); + System.out.println(bob == o); + } + + static native Object weakRef(Object o); + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.out gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.out *** gcc-4.0.2/libjava/testsuite/libjava.jni/pr18278.out Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.jni/pr18278.out Tue Dec 6 02:13:54 2005 *************** *** 0 **** --- 1,2 ---- + Bob + true diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870.java gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870.java *** gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870.java Wed Oct 5 19:35:45 2005 *************** *** 0 **** --- 1,44 ---- + // PR19870: Test static field access across nested class boundaries. + // + public class PR19870 + { + private static int x = 123; + + static class Foo + { + private static int junk = 1000; + + static void snafu( ) + { + System.out.println( x); + x = 456; + System.out.println( PR19870.x); + PR19870.x = 789; + System.out.println( PR19870.x); + + System.out.println( Bar.junk); + } + } + + static class Bar + { + private static int junk = 1984; + + static void snafu( ) + { + System.out.println( Foo.junk); + Foo.junk = 2000; + System.out.println( Foo.junk); + } + } + + public static void main( String[] args) + { + Foo.snafu( ); + Bar.snafu( ); + + System.out.println( Foo.junk); + Foo.junk = 3000; + System.out.println( Foo.junk); + } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870.out gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870.out *** gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870.out Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870.out Wed Oct 5 19:35:45 2005 *************** *** 0 **** --- 1,8 ---- + 123 + 456 + 789 + 1984 + 1000 + 2000 + 2000 + 3000 diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870_2.java gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870_2.java *** gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870_2.java Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870_2.java Wed Oct 5 19:35:45 2005 *************** *** 0 **** --- 1,39 ---- + // PR19870: Test synthetic accessor generation for private static methods + // accessed across nested class boundaries. + public class PR19870_2 + { + static class A + { + private static void foo( ) + { + System.out.println( "1"); + } + + private static void bar( int x) + { + System.out.println( x); + snafu( ); + PR19870_2.snafu( ); + } + } + + static class B + { + private static void foo( ) + { + A.foo( ); + } + } + + private static void snafu( ) + { + System.out.println( "3"); + } + + public static void main( String[] args) + { + A.foo( ); + A.bar( 2); + B.foo( ); + } + } diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870_2.out gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870_2.out *** gcc-4.0.2/libjava/testsuite/libjava.lang/PR19870_2.out Thu Jan 1 00:00:00 1970 --- gcc-4.0.3/libjava/testsuite/libjava.lang/PR19870_2.out Wed Oct 5 19:35:45 2005 *************** *** 0 **** --- 1,5 ---- + 1 + 2 + 3 + 3 + 1 diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/pr13107_2.xfail gcc-4.0.3/libjava/testsuite/libjava.lang/pr13107_2.xfail *** gcc-4.0.2/libjava/testsuite/libjava.lang/pr13107_2.xfail Fri Jan 23 02:49:57 2004 --- gcc-4.0.3/libjava/testsuite/libjava.lang/pr13107_2.xfail Thu Jan 1 00:00:00 1970 *************** *** 1 **** - xfail-byte --- 0 ---- diff -Nrcpad gcc-4.0.2/libjava/testsuite/libjava.lang/pr13107_3.xfail gcc-4.0.3/libjava/testsuite/libjava.lang/pr13107_3.xfail *** gcc-4.0.2/libjava/testsuite/libjava.lang/pr13107_3.xfail Fri Jan 23 02:49:57 2004 --- gcc-4.0.3/libjava/testsuite/libjava.lang/pr13107_3.xfail Thu Jan 1 00:00:00 1970 *************** *** 1 **** - xfail-byte --- 0 ---- diff -Nrcpad gcc-4.0.2/zlib/.cvsignore gcc-4.0.3/zlib/.cvsignore *** gcc-4.0.2/zlib/.cvsignore Mon Oct 11 17:35:35 2004 --- gcc-4.0.3/zlib/.cvsignore Thu Jan 1 00:00:00 1970 *************** *** 1 **** - autom4te.cache --- 0 ---- diff -Nrcpad gcc-4.0.2/zlib/ChangeLog gcc-4.0.3/zlib/ChangeLog *** gcc-4.0.2/zlib/ChangeLog Wed Sep 21 03:58:53 2005 --- gcc-4.0.3/zlib/ChangeLog Thu Mar 9 20:44:48 2006 *************** *** 1,3 **** --- 1,7 ---- + 2006-03-09 Release Manager + + * GCC 4.0.3 released. + 2005-09-20 Release Manager * GCC 4.0.2 released.