Yep, there was indeed some faulty branch in this method which was
triggered when processing methods that never return, i.e. always
thrown an exception.
Should be fixed now.
Eric
2008/8/4 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
> Eric,
> The example I was running is on old example I had on my PC I downloaded more
> than a year ago, when I first started testing with ajc, and abc. I just saw
> it and decided to see if everything is fine on abc.
>
> the files are attached if you wan to give it a try.
>
> Amjad
>
>
> Eric Bodden wrote:
>>>
>>> Any clues??
>>>
>>
>> Not really.
>>
>> It would help to have the body printed at that point. Can you insert...
>>
>> System.err.println(b);
>>
>> ... right before the line where the exception is thrown? (line 268)
>>
>> Eric
>>
>> 2008/8/3 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
>>
>>>
>>> Hi
>>> I was missing around with AOP using plain abc; without any extensions and
>>> I
>>> got an exception with I tried to compile my files, I used "abc -debug
>>> doValidate -argfile files.lst" and got this...
>>>
>>> Exception in thread "main" polyglot.util.InternalCompilerError: unhandled
>>> except
>>> ving/optimisation
>>> at abc.main.CompileSequence.runSequence(CompileSequence.java:142)
>>> at abc.main.Main.run(Main.java:406)
>>> at abc.main.Main.main(Main.java:144)
>>> Caused by: polyglot.util.InternalCompilerError: Last stmt should be
>>> ReturnStmt o
>>> mt
>>> at abc.soot.util.Restructure.restructureReturn(Restructure.java:268)
>>> at
>>> abc.weaving.weaver.ShadowPointsSetter.restructureBody(ShadowPointsSet
>>> at
>>> abc.weaving.weaver.ShadowPointsSetter.insertExecutionSP(ShadowPointsS
>>> )
>>> at
>>> abc.weaving.weaver.ShadowPointsSetter.setShadowPointsPass1(ShadowPoin
>>> 105)
>>> at
>>> abc.bbs.weaving.weaver.ShadowPointsSetter.setShadowPointsPass1(Shadow
>>> ava:61)
>>> at abc.bbs.weaving.weaver.Weaver.inlineConstructors(Weaver.java:43)
>>> at abc.weaving.weaver.Weaver.weave(Weaver.java:185)
>>> at abc.main.CompileSequence.weave(CompileSequence.java:496)
>>> at abc.main.CompileSequence.runSequence(CompileSequence.java:115)
>>> ... 2 more
>>>
>>>
>>> Any clues??
>>>
>>> Amjad
>>>
>>>
>>>
>>
>>
>>
>>
>
>
> // trace stuff dealing with Foo
> aspect Trace_v1 {
> pointcut methodCall() : call(* Foo.*(..)); // doesn't include constructors
> pointcut constructorCall() : call(Foo.new(..));
>
> pointcut methodExecution() : execution(* Foo.*(..)); // again, no ctors
> pointcut constructorExecution() : execution(Foo.new(..));
>
> pointcut fieldGet() : get(* Foo.*);
> pointcut fieldSet() : set(* Foo.*);
>
> pointcut objectInitialization() : initialization(Foo.new(..));
> pointcut classInitialization() : staticinitialization(Foo);
>
> pointcut exceptionHandler() : handler(Foo);
>
> before() : methodCall() {
> System.out.println("A method call to Foo is about to occur");
> }
> before() : constructorCall() {
> System.out.println("A constructor call to Foo is about to occur");
> }
> before() : methodExecution() {
> System.out.println("A method execution in Foo is about to occur");
> }
> before() : constructorExecution() {
> System.out.println("A constructor execution in Foo is about to occur");
> }
> before() : fieldGet() {
> System.out.println("Someone is about to get a field from Foo");
> }
> before() : fieldSet() {
> System.out.println("Someone is about to set a field in Foo");
> }
> before() : objectInitialization() {
> System.out.println("Foo is about to undergo instance initialization");
> }
> before() : classInitialization() {
> System.out.println("Foo is about to undergo class initialization");
> }
> before() : exceptionHandler() {
> System.out.println("A exception of type Foo is about to be handled");
> }
>
> after() : methodCall() {
> System.out.println("A method call to Foo just occurred");
> }
> after() : constructorCall() {
> System.out.println("A constructor call to Foo just occurred");
> }
> after() : methodExecution() {
> System.out.println("A method execution in Foo just occurred");
> }
> after() : constructorExecution() {
> System.out.println("A constructor execution in Foo just occurred");
> }
> after() : fieldGet() {
> System.out.println("Someone just got a field from Foo");
> }
> after() : fieldSet() {
> System.out.println("Someone just set a field in Foo");
> }
> after() : objectInitialization() {
> System.out.println("Foo has just undergone instance initialization");
> }
> after() : classInitialization() {
> System.out.println("Foo has just undergone class initialization");
> }
> after() : exceptionHandler() {
> System.out.println("A exception of type Foo has just been handled");
> }
> }
>
> public class Foo extends RuntimeException {
> int i;
>
> public static void main(String[] args) {
> System.out.println("== At top of main()");
>
> System.out.println("== constructing an object");
> Foo f = new Foo();
>
> System.out.println("== calling method helloWorld()");
> f.helloWorld();
>
> System.out.println("== getting a field...");
> int twice = 2 * f.i;
>
> System.out.println("== setting a field...");
> f.i = twice;
>
> System.out.println("== calling method exceptionThrower()");
> try {
> f.exceptionThrower();
> } catch(Foo fooException) {
> System.out.println("== caught an exception");
> }
>
> System.out.println("== At end of main()");
> }
>
> void helloWorld() {
> System.out.println("Hello world!");
> }
>
> void exceptionThrower() {
> throw this;
> }
> }
>
>
-- Eric Bodden Sable Research Group McGill University, Montréal, CanadaReceived on Mon Aug 04 2008 - 21:13:35 BST
This archive was generated by hypermail 2.2.0 : Mon Aug 11 2008 - 05:30:13 BST