From: Alexandre Petit-Bianco Date: Tue, 31 Jul 2001 22:20:05 +0000 (-0700) Subject: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9d7d836262a3137e04bf23c6073717be26bcc667;p=gcc.git [multiple changes] 2001-07-18 Alexandre Petit-Bianco * parse.y (create_interface): Avoid cyclic inheritance report when syntax error encountered during class definition. Fixes PR java/2956 2001-07-17 Alexandre Petit-Bianco * parse.h (INTERFACE_INNER_MODIFIERS): Disallow `private.' * parse.y (check_class_interface_creation): Allow `private' if the enclosing is not an interface. (create_interface): Interface tagged public if the enclosing context is an interface. (create_class): Class tagged public if the enclosing context is an interface. Fixes PR java/2959 2001-07-17 Alexandre Petit-Bianco * class.c (push_class): Set DECL_SIZE to `integer_zero_node.' Fixes PR java/2665 2001-07-13 Alexandre Petit-Bianco * parse.y (java_complete_lsh): Set CAN_COMPLETE_NORMALLY and unset TREE_CONSTANT_OVERFLOW of CASE_EXPR value. Fixes PR java/3602 (http://gcc.gnu.org/ml/gcc-patches/2001-07/msg02297.html ) From-SVN: r44524 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index b3e9a2ad375..a694743e6ce 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2001-07-18 Alexandre Petit-Bianco + + * parse.y (create_interface): Avoid cyclic inheritance report when + syntax error encountered during class definition. + Fixes PR java/2956 + 2001-07-18 Tom Tromey For PR java/2812: @@ -7,10 +13,32 @@ * Make-lang.in (jc1$(exeext)): Link against LIBICONV. (jv-scan$(exeext)): Likewise. +2001-07-17 Alexandre Petit-Bianco + + * parse.h (INTERFACE_INNER_MODIFIERS): Disallow `private.' + * parse.y (check_class_interface_creation): Allow `private' if the + enclosing is not an interface. + (create_interface): Interface tagged public if the enclosing + context is an interface. + (create_class): Class tagged public if the enclosing context + is an interface. + Fixes PR java/2959 + +2001-07-17 Alexandre Petit-Bianco + + * class.c (push_class): Set DECL_SIZE to `integer_zero_node.' + Fixes PR java/2665 + 2001-07-14 Tim Josling * check-init.c (check_init): Remove references to EXPON_EXPR. +2001-07-13 Alexandre Petit-Bianco + + * parse.y (java_complete_lsh): Set CAN_COMPLETE_NORMALLY and unset + TREE_CONSTANT_OVERFLOW of CASE_EXPR value. + Fixes PR java/3602 + 2001-07-13 Tom Tromey * jvspec.c (jvgenmain_spec): Remove -ffilelist-file from cc1 diff --git a/gcc/java/class.c b/gcc/java/class.c index 45bb6df2cf7..3b56f53ff51 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -331,6 +331,10 @@ push_class (class_type, class_name) input_filename = IDENTIFIER_POINTER (source_name); lineno = 0; decl = build_decl (TYPE_DECL, class_name, class_type); + + /* dbxout needs a DECL_SIZE if in gstabs mode */ + DECL_SIZE (decl) = integer_zero_node; + input_filename = save_input_filename; lineno = save_lineno; signature = identifier_subst (class_name, "L", '.', '/', ";"); diff --git a/gcc/java/parse.h b/gcc/java/parse.h index 798d1391770..a47e017ed4e 100644 --- a/gcc/java/parse.h +++ b/gcc/java/parse.h @@ -79,7 +79,7 @@ extern tree stabilize_reference PARAMS ((tree)); #define METHOD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT| \ ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE #define INTERFACE_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT -#define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT|ACC_STATIC +#define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_ABSTRACT|ACC_STATIC #define INTERFACE_METHOD_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT #define INTERFACE_FIELD_MODIFIERS ACC_PUBLIC|ACC_STATIC|ACC_FINAL diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 03a540c06e0..1fb08bcd343 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -3450,7 +3450,9 @@ check_class_interface_creation (is_interface, flags, raw_name, qualified_name, d else { check_modifiers_consistency (flags); - icaf = ACC_PRIVATE|ACC_PROTECTED; + icaf = ACC_PROTECTED; + if (! CLASS_INTERFACE (GET_CPC ())) + icaf |= ACC_PRIVATE; } } @@ -3738,6 +3740,11 @@ create_interface (flags, id, super) tree q_name = parser_qualified_classname (raw_name); tree decl = IDENTIFIER_CLASS_VALUE (q_name); + /* Certain syntax errors are making SUPER be like ID. Avoid this + case. */ + if (ctxp->class_err && id == super) + super = NULL; + EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */ /* Basic checks: scope, redefinition, modifiers */ @@ -3750,7 +3757,12 @@ create_interface (flags, id, super) /* Suspend the current parsing context if we're parsing an inner interface */ if (CPC_INNER_P ()) - java_parser_context_suspend (); + { + java_parser_context_suspend (); + /* Interface members are public. */ + if (CLASS_INTERFACE (GET_CPC ())) + flags |= ACC_PUBLIC; + } /* Push a new context for (static) initialized upon declaration fields */ java_parser_context_push_initialized_field (); @@ -3870,6 +3882,11 @@ create_class (flags, id, super, interfaces) tree class_id, decl; tree super_decl_type; + /* Certain syntax errors are making SUPER be like ID. Avoid this + case. */ + if (ctxp->class_err && id == super) + super = NULL; + class_id = parser_qualified_classname (raw_name); decl = IDENTIFIER_CLASS_VALUE (class_id); EXPR_WFL_NODE (id) = class_id; @@ -3884,7 +3901,13 @@ create_class (flags, id, super, interfaces) /* Suspend the current parsing context if we're parsing an inner class or an anonymous class. */ if (CPC_INNER_P ()) - java_parser_context_suspend (); + { + java_parser_context_suspend (); + /* Interface members are public. */ + if (CLASS_INTERFACE (GET_CPC ())) + flags |= ACC_PUBLIC; + } + /* Push a new context for (static) initialized upon declaration fields */ java_parser_context_push_initialized_field (); @@ -7336,7 +7359,9 @@ java_reorder_fields () } } } - stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list)); + /* There are cases were gclass_list will be empty. */ + if (gclass_list) + stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list)); } /* Layout the methods of all classes loaded in one way or another. @@ -11367,6 +11392,8 @@ java_complete_lhs (node) } cn = fold (convert (int_type_node, cn)); + TREE_CONSTANT_OVERFLOW (cn) = 0; + CAN_COMPLETE_NORMALLY (cn) = 1; /* Multiple instance of a case label bearing the same value is checked during code generation. The case