From: Matt Kraai Date: Fri, 7 Sep 2001 08:54:32 +0000 (+0000) Subject: typeck.c (java_array_type_length, [...]): Represent empty arrays by NULL index. X-Git-Tag: prereleases/libstdc++-3.0.95~2215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a9f67271e36408566367fee6cdff374b85550ed;p=thirdparty%2Fgcc.git typeck.c (java_array_type_length, [...]): Represent empty arrays by NULL index. * java/typeck.c (java_array_type_length, build_prim_array_type): Represent empty arrays by NULL index. * stor-layout.c (compute_record_mode): Check DECL_SIZE is set. From-SVN: r45460 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dedc597e1045..426604904159 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-09-07 Matt Kraai + + * stor-layout.c (compute_record_mode): Check DECL_SIZE is set. + 2001-09-06 Ira Ruben Remove OP_IDENTIFIER. diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 0315ded4bffb..c50858777672 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2001-09-07 Matt Kraai + + * typeck.c (java_array_type_length, build_prim_array_type): + Represent empty arrays by NULL index. + 2001-09-06 Anthony Green * class.c (O_BINARY): Define if necessary. diff --git a/gcc/java/typeck.c b/gcc/java/typeck.c index b61a290c7ed7..4f8a34e752e0 100644 --- a/gcc/java/typeck.c +++ b/gcc/java/typeck.c @@ -353,9 +353,12 @@ java_array_type_length (array_type) if (arfld != NULL_TREE) { tree index_type = TYPE_DOMAIN (TREE_TYPE (arfld)); - tree high = TYPE_MAX_VALUE (index_type); - if (TREE_CODE (high) == INTEGER_CST) - return TREE_INT_CST_LOW (high) + 1; + if (index_type != NULL_TREE) + { + tree high = TYPE_MAX_VALUE (index_type); + if (TREE_CODE (high) == INTEGER_CST) + return TREE_INT_CST_LOW (high) + 1; + } } return -1; } @@ -370,9 +373,15 @@ build_prim_array_type (element_type, length) tree element_type; HOST_WIDE_INT length; { - tree max_index = build_int_2 (length - 1, (0 == length ? -1 : 0)); - TREE_TYPE (max_index) = sizetype; - return build_array_type (element_type, build_index_type (max_index)); + tree index = NULL; + + if (length != -1) + { + tree max_index = build_int_2 (length - 1, (0 == length ? -1 : 0)); + TREE_TYPE (max_index) = sizetype; + index = build_index_type (max_index); + } + return build_array_type (element_type, index); } /* Return a Java array type with a given ELEMENT_TYPE and LENGTH. diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 3a4f998902fe..e145b97e5d6f 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1110,6 +1110,7 @@ compute_record_mode (type) || (TYPE_MODE (TREE_TYPE (field)) == BLKmode && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))) || ! host_integerp (bit_position (field), 1) + || DECL_SIZE (field) == 0 || ! host_integerp (DECL_SIZE (field), 1)) return;