[Soot-list] Extra athrow instruction in a finally block

Eric Bodden eric.bodden at mail.mcgill.ca
Thu Mar 6 14:05:04 EST 2008


That's because the finally block has to rethrow the exception that
caused it to execute (in case there was any).

Eric

On 06/03/2008, Alvin Yan <feiya200 at cs.uregina.ca> wrote:
> Hmmm, no. For example a code piece:
>  try{
>         a();
>  }catch(Exception e){
>
>  }finally{
>         System.out.println();
>  }
>
>  will be compiled to
>
>     TRYCATCHBLOCK L0 L1 L2 java/lang/Exception
>     TRYCATCHBLOCK L0 L3 L4
>    L0 (0)
>     LINENUMBER 8 L0
>     ALOAD 0
>     INVOKEVIRTUAL Test.a()V
>    L1 (3)
>     GOTO L5
>    L2 (5)
>     LINENUMBER 9 L2
>    FRAME SAME1 java/lang/Exception
>     ASTORE 1
>    L3 (8)
>     LINENUMBER 12 L3
>     GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
>     INVOKEVIRTUAL java/io/PrintStream.println()V
>     GOTO L6
>    L4 (12)
>     LINENUMBER 11 L4
>    FRAME SAME1 java/lang/Throwable
>     ASTORE 2
>    L7 (15)
>     LINENUMBER 12 L7
>     GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
>     INVOKEVIRTUAL java/io/PrintStream.println()V
>    L8 (18)
>     LINENUMBER 13 L8
>     ALOAD 2
>     ATHROW
>    L5 (21)
>     LINENUMBER 12 L5
>    FRAME SAME
>     GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
>     INVOKEVIRTUAL java/io/PrintStream.println()V
>    L6 (25)
>     LINENUMBER 14 L6
>    FRAME SAME
>
>  I'm just wondering why there is that ATHROW?
>  Thanks a lot!
>
>  Alvin
>
>  --------------------------------------------------
>  From: "Eric Bodden" <eric.bodden at mail.mcgill.ca>
>  Sent: Thursday, March 06, 2008 8:24 AM
>  To: "Alvin Yan" <feiya200 at cs.uregina.ca>
>  Cc: <soot-list at sable.mcgill.ca>
>  Subject: Re: [Soot-list] Extra athrow instruction in a finally block
>
>
>  > You mean code like that?
>  >
>  > try{
>  > ...
>  > } finally {
>  >  throw e; //(x)
>  > }
>  >
>  > Certainly line (x) is an exit point for this method because an
>  > exception *will* be thrown at this point. The try/finally construct
>  > only guards the "try" part, not the "finally" part.
>  >
>  > Eric
>


-- 
Eric Bodden
Sable Research Group
McGill University, Montréal, Canada


More information about the Soot-list mailing list