mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-04 05:59:33 +08:00
parse.y (resolve_field_access): Initialize class if field is found in another static field.
* parse.y (resolve_field_access): Initialize class if field is found in another static field. * expr.c (build_class_init): Don't optimize out initialization of implemented interface. From-SVN: r64185
This commit is contained in:
parent
218d1401af
commit
8b8e6c64af
@ -1,3 +1,10 @@
|
||||
2003-03-11 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* parse.y (resolve_field_access): Initialize class if field is
|
||||
found in another static field.
|
||||
* expr.c (build_class_init): Don't optimize out initialization of
|
||||
implemented interface.
|
||||
|
||||
2003-03-11 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* jcf-io.c (caching_stat): Initialize origsep to remove compiler
|
||||
|
@ -1672,7 +1672,14 @@ tree
|
||||
build_class_init (tree clas, tree expr)
|
||||
{
|
||||
tree init;
|
||||
if (inherits_from_p (current_class, clas))
|
||||
|
||||
/* An optimization: if CLAS is a superclass of the class we're
|
||||
compiling, we don't need to initialize it. However, if CLAS is
|
||||
an interface, it won't necessarily be initialized, even if we
|
||||
implement it. */
|
||||
if ((! CLASS_INTERFACE (TYPE_NAME (clas))
|
||||
&& inherits_from_p (current_class, clas))
|
||||
|| current_class == clas)
|
||||
return expr;
|
||||
|
||||
if (always_initialize_class_p)
|
||||
|
@ -9301,6 +9301,19 @@ resolve_field_access (tree qual_wfl, tree *field_decl, tree *field_type)
|
||||
return error_mark_node;
|
||||
if (is_static)
|
||||
field_ref = maybe_build_class_init_for_field (decl, field_ref);
|
||||
|
||||
/* If we're looking at a static field, we may need to generate a
|
||||
class initialization for it. This can happen when the access
|
||||
looks like `field.ref', where `field' is a static field in an
|
||||
interface we implement. */
|
||||
if (!flag_emit_class_files
|
||||
&& !flag_emit_xref
|
||||
&& 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);
|
||||
}
|
||||
}
|
||||
else
|
||||
field_ref = decl;
|
||||
|
Loading…
Reference in New Issue
Block a user