typeck.c (build_prim_array_type): Added leading comment.

2001-02-05  Jeff Sturm  <jeff.sturm@commerceone.com>
	    Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* typeck.c (build_prim_array_type): Added leading comment.
	(build_java_array_type): Moved locals out of
	block. Always create the `data' field, fixed alignment to match
	C++.

(http://gcc.gnu.org/ml/gcc-patches/2001-02/msg00378.html)

Co-Authored-By: Alexandre Petit-Bianco <apbianco@cygnus.com>

From-SVN: r39507
This commit is contained in:
Jeff Sturm 2001-02-07 01:46:42 +00:00 committed by Alexandre Petit-Bianco
parent 8480e4804c
commit c00dd14e10
2 changed files with 19 additions and 34 deletions

View File

@ -1,3 +1,11 @@
2001-02-05 Jeff Sturm <jeff.sturm@commerceone.com>
Alexandre Petit-Bianco <apbianco@cygnus.com>
* typeck.c (build_prim_array_type): Added leading comment.
(build_java_array_type): Moved locals out of
block. Always create the `data' field, fixed alignment to match
C++.
2001-02-04 Tom Tromey <tromey@redhat.com>
* expr.c (java_lang_expand_expr): Don't bother recomputing

View File

@ -359,6 +359,11 @@ java_array_type_length (array_type)
return -1;
}
/* An array of unknown length will be ultimately given an length of
-2, so that we can still have `length' producing a negative value
even if found. This was part of an optimization amaing at removing
`length' from static arrays. We could restore it, FIXME. */
tree
build_prim_array_type (element_type, length)
tree element_type;
@ -378,7 +383,7 @@ build_java_array_type (element_type, length)
tree element_type;
HOST_WIDE_INT length;
{
tree sig, t, fld;
tree sig, t, fld, atype, arfld;
char buf[12];
tree elsig = build_java_signature (element_type);
tree el_name = element_type;
@ -416,39 +421,11 @@ build_java_array_type (element_type, length)
FIELD_PUBLIC (fld) = 1;
FIELD_FINAL (fld) = 1;
if (length >= 0)
{
tree atype = build_prim_array_type (element_type, length);
tree arfld = build_decl (FIELD_DECL, get_identifier ("data"), atype);
DECL_CONTEXT (arfld) = t;
TREE_CHAIN (fld) = arfld;
/* We need to force the data field to begin at an alignment at
least equal to the biggest alignment in an object type node
in order to be compatible with the way that JArray is defined
in CNI. However, we can't exceed BIGGEST_FIELD_ALIGNMENT. */
{
unsigned desired_align = TYPE_ALIGN (object_type_node);
desired_align = MAX (desired_align, TYPE_ALIGN (element_type));
#ifdef BIGGEST_FIELD_ALIGNMENT
desired_align = MIN (desired_align,
(unsigned) BIGGEST_FIELD_ALIGNMENT);
#endif
#ifdef ADJUST_FIELD_ALIGN
desired_align = ADJUST_FIELD_ALIGN (fld, desired_align);
#endif
DECL_ALIGN (arfld) = desired_align;
}
}
else
{
unsigned desired_align = TYPE_ALIGN (element_type);
#ifdef BIGGEST_FIELD_ALIGNMENT
desired_align = MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
#endif
TYPE_ALIGN (t) = desired_align;
}
atype = build_prim_array_type (element_type, length);
arfld = build_decl (FIELD_DECL, get_identifier ("data"), atype);
DECL_CONTEXT (arfld) = t;
TREE_CHAIN (fld) = arfld;
DECL_ALIGN (arfld) = TYPE_ALIGN (element_type);
/* We could layout_class, but that loads java.lang.Object prematurely.
* This is called by the parser, and it is a bad idea to do load_class