diff options
-rw-r--r-- | gcc/java/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/java/class.c | 3 | ||||
-rw-r--r-- | gcc/java/lex.c | 4 |
3 files changed, 12 insertions, 2 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index dfd7dcb..31e65da 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,10 @@ +1999-02-05 Andrew Haley <aph@cygnus.com> + + * class.c (make_class_data): The superclass of an interface should + be null, not class Object. + + * lex.c (java_lex): Sign extend hex literals. + 1999-02-04 Andrew Haley <aph@cygnus.com> * class.c (build_utf8_ref): Output signatures using '.' as a diff --git a/gcc/java/class.c b/gcc/java/class.c index 69fef55..3f2adbd 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1135,7 +1135,8 @@ make_class_data (type) PUSH_FIELD_VALUE (cons, "accflags", build_int_2 (get_access_flags_from_decl (type_decl), 0)); - PUSH_FIELD_VALUE (cons, "superclass", super); + PUSH_FIELD_VALUE (cons, "superclass", + CLASS_INTERFACE (type_decl) ? null_pointer_node : super); PUSH_FIELD_VALUE (cons, "constants", constant_pool_constructor); PUSH_FIELD_VALUE (cons, "methods", build1 (ADDR_EXPR, method_ptr_type_node, methods_decl)); diff --git a/gcc/java/lex.c b/gcc/java/lex.c index 9984ab9..e1e1074 100644 --- a/gcc/java/lex.c +++ b/gcc/java/lex.c @@ -850,11 +850,13 @@ java_lex (java_lval) /* 2147483648 is valid if operand of a '-'. Otherwise, 2147483647 is the biggest `int' literal that can be expressed using a 10 radix. For other radixes, everything - that fits within 32 bits is OK. */ + that fits within 32 bits is OK. As all literals are + signed, we sign extend here. */ int hb = (low >> 31) & 0x1; if (overflow || high || (hb && low & 0x7fffffff && radix == 10) || (hb && !(low & 0x7fffffff) && !ctxp->minus_seen && radix == 10)) JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `int' literal"); + high = -hb; } ctxp->minus_seen = 0; SET_LVAL_NODE_TYPE (build_int_2 (low, high), |