From: Tom Tromey Date: Tue, 12 Sep 2000 22:09:36 +0000 (+0000) Subject: re GNATS gcj/343 (can't cast array to serializable) X-Git-Tag: prereleases/libstdc++-2.92~4055 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee17a29049f330ff40a486e56826468a223323c2;p=thirdparty%2Fgcc.git re GNATS gcj/343 (can't cast array to serializable) Fix for PR gcj/343: * lex.c (java_init_lex): Initialize java_io_serializable. * parse.y (java_io_serializable): New global. (valid_ref_assignconv_cast_p): An array can be cast to serializable. From-SVN: r36376 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 2f248f47241a..642f4a79164c 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2000-09-12 Tom Tromey + + Fix for PR gcj/343: + * lex.c (java_init_lex): Initialize java_io_serializable. + * parse.y (java_io_serializable): New global. + (valid_ref_assignconv_cast_p): An array can be cast to + serializable. + 2000-09-10 Zack Weinberg * decl.c, expr.c: Include defaults.h if not already included. diff --git a/gcc/java/lex.c b/gcc/java/lex.c index 6efb90717801..535733fe2e23 100644 --- a/gcc/java/lex.c +++ b/gcc/java/lex.c @@ -72,6 +72,8 @@ java_init_lex () java_lang_id = get_identifier ("java.lang"); if (!java_lang_cloneable) java_lang_cloneable = get_identifier ("java.lang.Cloneable"); + if (!java_io_serializable) + java_io_serializable = get_identifier ("java.io.Serializable"); if (!inst_id) inst_id = get_identifier ("inst$"); if (!wpv_id) diff --git a/gcc/java/parse.y b/gcc/java/parse.y index d37a7f1b32b4..9c92e58242aa 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -387,6 +387,9 @@ static tree inst_id = NULL_TREE; /* The "java.lang.Cloneable" qualified name. */ static tree java_lang_cloneable = NULL_TREE; +/* The "java.io.Serializable" qualified name. */ +static tree java_io_serializable = NULL_TREE; + /* Context and flag for static blocks */ static tree current_static_block = NULL_TREE; @@ -12304,18 +12307,24 @@ valid_ref_assignconv_cast_p (source, dest, cast) else return source == dest || interface_of_p (dest, source); } - else /* Array */ - return (cast ? - (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable) : 0); + else + { + /* Array */ + return (cast + && (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable + || (DECL_NAME (TYPE_NAME (source)) + == java_io_serializable))); + } } if (TYPE_ARRAY_P (source)) { if (TYPE_CLASS_P (dest)) return dest == object_type_node; /* Can't cast an array to an interface unless the interface is - java.lang.Cloneable */ + java.lang.Cloneable or java.io.Serializable. */ if (TYPE_INTERFACE_P (dest)) - return (DECL_NAME (TYPE_NAME (dest)) == java_lang_cloneable ? 1 : 0); + return (DECL_NAME (TYPE_NAME (dest)) == java_lang_cloneable + || DECL_NAME (TYPE_NAME (dest)) == java_io_serializable); else /* Arrays */ { tree source_element_type = TYPE_ARRAY_ELEMENT (source);