Re: [Jastadd] [bug report] bug in establishing throws clauses of anonymous class constructors, and a possible fix

From: Jesper Öqvist <jesper.oqvist_at_cs.lth.se>
Date: Mon, 27 Feb 2012 11:23:44 +0100

Thank you for your bug report!

I have committed the fix in SVN revision 9211.

/Jesper

On 02/25/2012 10:39 AM, Na, Hyunik wrote:
>
> I'm sorry. I pressed Ctrl+Enter by mistake.
>
> The following is the whole thing that I intended to send.
>
> ---------------------------------------------------
>
> Hello JastAdd developers,
>
> I found a minor bug of JastAddJ in establishing throws clauses of
> anonymous class constructors, and a possible fix.
>
> It is minor in that it is extremely rare that this bug causes a
> problem. (in only one .java file, java/security/KeyStore.java, in
> OpenJDK6 class library)
>
> But, due to this bug (and two others), I couldn't compile OpenJDK6
> class library using JastAddJ, as I reported 3 months ago.
>
> The bug manifests itself in the following simple example:
>
> -=-=-=
>
> class C { }
>
> class D { }
>
> class MyException extends Exception { }
>
> public class Test {
>
> public static void main( String [] args ) {
>
> new C() {
>
> D d = new D() { void m() throws MyException { throw
> new MyException(); } };
>
> };
>
> }
>
> }
>
> -=-=-=
>
> Running JastAddJ compiler (rev. 9210) on this example produces the
> following error message:
>
> -=-=-=
>
> [hina_at_hyunikLinux temp]$ java -cp JastAddJ/Java1.5Backend/
> JavaCompiler Test.java
>
> Errors:
>
> Test.java:7:
>
> Semantic Error: new C() {
>
> D d = new D() {
>
> void m() throws MyException {
>
> throw new MyException();
>
> }
>
> };
>
> } may throw uncaught exception MyException; it must be caught or
> declared as being thrown
>
> [hina_at_hyunikLinux temp]$
>
> -=-=-=
>
> The problem is that JastAddJ adds MyException in the throws clause of
> the anonymous constructor, "new C() {...}",
>
> which should not be the case.
>
> I made a slight modification of the JastAddJ source code at this problem:
>
> The last line
>
> return super.reachedException(catchType);
>
> of ClassInstanceExpr.reachedException() in
> Java1.4Frontend/ExceptionHandling.jrag was replaced by the following
> four lines.
>
> for ( int i = 0 ; i < getNumArg() ; i++ ) {
>
> if ( getArg(i).reachedException(catchType) )
>
> return true;
>
> }
>
> return false;
>
> This is to prevent JastAddJ from wrongly recognizing the exceptions
> thrown in the TypeDecl subtree of a ClassInstanceExpr
>
> as the exceptions that the ClassInstanceExpr throws.
>
> Now, I can compile java/security/KeyStore.java
>
> I hope this modification is appropriate.
>
> - Hyunik.
>
>
> _______________________________________________
> JastAdd mailing list
> JastAdd_at_cs.lth.se
> https://mail1.cs.lth.se/cgi-bin/mailman/listinfo/jastadd
Received on Mon Feb 27 2012 - 11:23:26 CET

This archive was generated by hypermail 2.3.0 : Wed Apr 16 2014 - 17:19:06 CEST