java/5178: Method call on qualified static field doesn't initialize its class
Thu Dec 6 01:06:00 GMT 2001

>Number:         5178
>Category:       java
>Synopsis:       Method call on qualified static field doesn't initialize its class
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Dec 22 16:06:00 PST 2001
>Originator:     Bryce McKinlay
>Release:        gcc version 3.1 20011221 (experimental)

The test case below, derived from, crashes because no class initialization for "Bar" is generated. This occurs when the qualified field name is enclosed in brackets but not otherwise.

In the case which works, java_complete_lhs sees a CALL_EXPR and calls patch_method_invocation, which sees that the call is qualified and uses cut_identifier_in_qualified to "cut" the last element off the WFL identifier chain. resolve_qualified_expression_name sets found_decl to a DECL, which is wrapped with a class initialization in resolve_field_access.

In the broken case, java_complete_lhs sees a EXPR_WITH_FILE_LOCATION and calls resolve_expression_name. resolve_qualified_expression_name sees the CALL_EXPR on the end of the WFL chain (because no "cut" has occured - but should it be there in the first place?) and ends up in the code for "Field access using a primary" which seems wrong, setting found_decl to a CALL_EXPR which subsquently confuses resolve_field_access into not building a class initialization.

This may also be what causes the problem RTH saw on Alpha with the same test case:

class Bar 
  static Integer I = new Integer(1);

public class Qual
  public static void main(String[] args)
    // System.out.println (Bar.I.toString());  // ok
    System.out.println ((Bar.I).toString());   // crash


More information about the Java-prs mailing list