When a method creates an instance of an anonymous inner class, it must catch or
declare any exceptions throwable by the inner class's constructor.

GCJ gives an error about this even though the method *does* handle or declare
it: (Will attach test cases...)

$ gcj -c  FailThrow.java
FailThrow.java: In class 'FailThrow$1':
FailThrow.java: In constructor '(FailThrow)':
FailThrow.java:6: error: Exception ‘java.lang.Exception’ must be caught, or it
must be declared in the ‘throws’ clause of ‘FailThrow$1’.
                InnerBase obj = new InnerBase() {};
                                       ^
1 error

Creating an instance of the base class, with the same constructor, works fine.

GCC built from CVS HEAD: gcj-4.0 (GCC) 4.1.0 20050415 (experimental)
./configure --prefix=/usr/local/gcj --program-suffix=-4.0
--enable-languages=c,c++,java
Running on Ubuntu Linux (Hoary Hedgehog).

-- 
           Summary: Anonymous inner class constructor's exceptions can't be
                    caught or thrown
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: java
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: brion at pobox dot com
                CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu
                    dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21045

Reply via email to