This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

java/8432: Misleading error message for undeclared variable in inner class


>Number:         8432
>Category:       java
>Synopsis:       Misleading error message for undeclared variable in inner class
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Nov 02 17:36:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jesse Rosenstock
>Release:        3.3 20021101 (experimental)
>Organization:
>Environment:
System: Linux churchill 2.4.3-12 #1 Fri Jun 8 15:05:56 EDT 2001 i686 unknown
Architecture: i686

        <machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --prefix=/home/user/jmr/app/gcc --enable-languages=c++,java --enable-threads=posix --enable-shared --with-as=/home/user/jmr/app/binutils/bin/as --with-ld=/home/user/jmr/app/binutils/bin/ld : (reconfigured)  : (reconfigured)  : (reconfigured)  : (reconfigured)  : (reconfigured)  : (reconfigured)  : (reconfigured)
>Description:
If a variable isn't declared in an inner class, an error message is issued saying that the local variable must be declared final.  It would be better to say that the variable is undeclared.
>How-To-Repeat:
; cat InnerStaticFinal.java
public class InnerStaticFinal {
    private static final class Inner extends Base {
        private Inner () {
            super (foo);
        }
    }
}

; cat Base.java
public class Base {
    public Base (Object o) {
    }
}

; gcj Base.java InnerStaticFinal.java 
InnerStaticFinal.java: In class `InnerStaticFinal$Inner':
InnerStaticFinal.java: In constructor `()':
InnerStaticFinal.java:4: error: Local variable `foo' can't be accessed from within the inner class `InnerStaticFinal$Inner' unless it is declared final.
               super (foo);
                      ^
1 error

; javac Base.java InnerStaticFinal.java 
InnerStaticFinal.java:4: cannot resolve symbol
symbol  : variable foo  
location: class InnerStaticFinal.Inner
            super (foo);
                   ^
1 error
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="InnerStaticFinal.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="InnerStaticFinal.java"

cHVibGljIGNsYXNzIElubmVyU3RhdGljRmluYWwgewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
Y2xhc3MgSW5uZXIgZXh0ZW5kcyBCYXNlIHsKICAgICAgICBwcml2YXRlIElubmVyICgpIHsKICAg
ICAgICAgICAgc3VwZXIgKGZvbyk7CiAgICAgICAgfQogICAgfQp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]