re GNATS gcj/129 (Static array length access bug in gcj)
2000-05-02 Alexandre Petit-Bianco <apbianco@cygnus.com> * parse.y (resolve_field_access): Call the appropriate <clinit> before accessing the length of a static array. Craft a decl for the field while its time. (Fixes the PR #129: http://sourceware.cygnus.com/ml/java-prs/2000-q1/msg00013.html) From-SVN: r34340
This commit is contained in:
parent
079b71f5ab
commit
611a4b873e
@ -34,6 +34,12 @@
|
||||
`wfl_operator', to maybe_build_primttype_type_ref.
|
||||
Fixes PR gcj/235.
|
||||
|
||||
2000-05-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
|
||||
|
||||
* parse.y (resolve_field_access): Call the appropriate <clinit>
|
||||
before accessing the length of a static array. Craft a decl for
|
||||
the field while its time. Fixes PR gcj/129.
|
||||
|
||||
2000-05-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
|
||||
|
||||
* parse.y (resolve_package): Correctly set `*next' (was off by
|
||||
|
@ -11348,6 +11348,18 @@ resolve_field_access (qual_wfl, field_decl, field_type)
|
||||
tree length = build_java_array_length_access (where_found);
|
||||
field_ref =
|
||||
build_java_arraynull_check (type_found, length, int_type_node);
|
||||
|
||||
/* In case we're dealing with a static array, we need to
|
||||
initialize its class before the array length can be fetched.
|
||||
It's also a good time to create a DECL_RTL for the field if
|
||||
none already exists, otherwise if the field was declared in a
|
||||
class found in an external file and hasn't been (and won't
|
||||
be) accessed for its value, none will be created. */
|
||||
if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
|
||||
{
|
||||
build_static_field_ref (where_found);
|
||||
field_ref = build_class_init (DECL_CONTEXT (where_found), field_ref);
|
||||
}
|
||||
}
|
||||
/* We might have been trying to resolve field.method(). In which
|
||||
case, the resolution is over and decl is the answer */
|
||||
|
@ -8650,6 +8650,18 @@ resolve_field_access (qual_wfl, field_decl, field_type)
|
||||
tree length = build_java_array_length_access (where_found);
|
||||
field_ref =
|
||||
build_java_arraynull_check (type_found, length, int_type_node);
|
||||
|
||||
/* In case we're dealing with a static array, we need to
|
||||
initialize its class before the array length can be fetched.
|
||||
It's also a good time to create a DECL_RTL for the field if
|
||||
none already exists, otherwise if the field was declared in a
|
||||
class found in an external file and hasn't been (and won't
|
||||
be) accessed for its value, none will be created. */
|
||||
if (TREE_CODE (where_found) == VAR_DECL && FIELD_STATIC (where_found))
|
||||
{
|
||||
build_static_field_ref (where_found);
|
||||
field_ref = build_class_init (DECL_CONTEXT (where_found), field_ref);
|
||||
}
|
||||
}
|
||||
/* We might have been trying to resolve field.method(). In which
|
||||
case, the resolution is over and decl is the answer */
|
||||
|
Loading…
x
Reference in New Issue
Block a user