java/1247: gcj fails to compile this 1.1 innerclass code

mdejong@cygnus.com mdejong@cygnus.com
Wed Dec 20 12:23:00 GMT 2000


>Number:         1247
>Category:       java
>Synopsis:       gcj fails to compile this 1.1 innerclass code
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    apbianco
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 20 12:18:14 PST 2000
>Closed-Date:    Sun Dec 17 00:32:11 PST 2000
>Last-Modified:  Sun Dec 17 00:40:00 PST 2000
>Originator:     Mo
>Release:        Sourceware CVS
>Organization:
>Environment:
Linux Box.
>Description:
% cat DefaultStaticInnerClass_InPackage.java
// File DefaultStaticInnerClass_InPackage.java

package foo;

public class DefaultStaticInnerClass_InPackage {

    static class Inner {}

    static class Inner_Test {
      Inner in;
    }

}

// This test just makes sure the fully qualified name can be used.

class DefaultStaticInnerClass_InPackage_Test {
  DefaultStaticInnerClass_InPackage.Inner f;
}



% cat DefaultStaticInnerClass_InPackage_ExternalTest.java
// File DefaultStaticInnerClass_InPackage_ExternalTest.java

package foo;

// This test makes sure an inner class from inside the
// same package can be used.

public class DefaultStaticInnerClass_InPackage_ExternalTest {
  DefaultStaticInnerClass_InPackage.Inner f;
}



When run with gcj from sourceware, I get the following result:

% gcj -C DefaultStaticInnerClass_InPackage.java \
         DefaultStaticInnerClass_InPackage_ExternalTest.java
foo/DefaultStaticInnerClass_InPackage.java:0: Cannot find file for class foo.DefaultStaticInnerClass_InPackage$Inner.


This same code compiles just fine with javac and jikes.
>How-To-Repeat:

>Fix:

>Release-Note:

>Audit-Trail:

Formerly PR gcj/223


From: Bryce McKinlay <bryce@albatross.co.nz>
To: mdejong@cygnus.com
Cc: java-gnats@sourceware.cygnus.com
Subject: Re: gcj/223: gcj fails to compile this 1.1 innerclass code
Date: Mon, 08 May 2000 18:30:52 +1200

 mdejong@cygnus.com wrote:
 
 > >Synopsis:       gcj fails to compile this 1.1 innerclass code
 
 I dont think this is really a problem specific to inner classes, but rather more general issues with the way gcj
 resolves nested package/class/inner class/field names and finds packages.
 
 For example, the following code also fails:
 
 // in "pkg"
 
 package pkg;
 
 public class A
 {
   public static String f = "f";
 }
 
 // in "pkg/pkg"
 
 package pkg.pkg;
 
 public class B
 {
   static String c = pkg.A.f;
 }
 
 Trying to compile them from within "pkg" I get:
 
 $ gcj -C A.java pkg/B.java
 pkg/B.java: In class `pkg.pkg.B':
 pkg/B.java: In method `<clinit>()':
 pkg/B.java:5: Undefined variable or class name: `pkg'.
   static String c = pkg.A.f;
                     ^
 1 error
 
 Trying to compile from the top level gives a different error:
 
 $ gcj -C pkg/A.java pkg/pkg/B.java
 pkg/pkg/B.java: In class `pkg.pkg.B':
 pkg/pkg/B.java: In method `<clinit>()':
 pkg/pkg/B.java:5: Incompatible type for declaration. Can't convert `pkg.A' to `java.lang.String'.
   static String c = pkg.A.f;
                 ^
 1 error
 
 With javac or jikes it works either way.
 
 regards
 
   [ bryce ]
 
 
State-Changed-From-To: open->closed
State-Changed-By: bryce
State-Changed-When: Sun Dec 17 00:32:11 2000
State-Changed-Why:
    This test case now works fine on the current cvs compiler 
    provided that gcj is invoked from the top level of the package
    heirachy, or the top level directory is present in CLASSPATH.
    
    gcj -C doesn't work like jikes or javac here, but this issue
    is covered by gcj/346.

From: bryce@albatross.co.nz
To: apbianco@cygnus.com, java-gnats@sourceware.cygnus.com, mdejong@cygnus.com
Cc:  
Subject: Re: gcj/223
Date: 17 Dec 2000 08:32:11 -0000

 Synopsis: gcj fails to compile this 1.1 innerclass code
 
 State-Changed-From-To: open->closed
 State-Changed-By: bryce
 State-Changed-When: Sun Dec 17 00:32:11 2000
 State-Changed-Why:
     This test case now works fine on the current cvs compiler 
     provided that gcj is invoked from the top level of the package
     heirachy, or the top level directory is present in CLASSPATH.
     
     gcj -C doesn't work like jikes or javac here, but this issue
     is covered by gcj/346.
 
 http://sources.redhat.com/cgi-bin/gnatsweb.pl?cmd=view&pr=223&database=java
>Unformatted:




More information about the Gcc-prs mailing list