# HG changeset patch # User Christian Humer # Date 1377861108 -7200 # Node ID b010fd3de42d9fe9da6b70c2e501ce148051ffca # Parent 88316d1c464468962c61429789a29f920019c460 Truffle-DSL: added a test that covers wrong a wrong else connection bug. diff -r 88316d1c4644 -r b010fd3de42d graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java Fri Aug 30 11:37:42 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java Fri Aug 30 13:11:48 2013 +0200 @@ -26,10 +26,12 @@ import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestElseConnectionBug1Factory; import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestGroupingFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.SimpleTypes; import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; +import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; /** @@ -154,6 +156,50 @@ } + @Test + public void testElseConnectionBug1() { + CallTarget target = TestHelper.createCallTarget(TestElseConnectionBug1Factory.create(new GenericInt())); + Assert.assertEquals(42, target.call()); + } + + @SuppressWarnings("unused") + @NodeChild(value = "genericChild", type = GenericInt.class) + public abstract static class TestElseConnectionBug1 extends ValueNode { + + @Specialization(order = 1, rewriteOn = {SlowPathException.class}, guards = "isInitialized") + public int doInteger(int value) throws SlowPathException { + throw new SlowPathException(); + } + + @Specialization(order = 3, guards = "isInitialized") + public int doObject(int value) { + return value == 42 ? value : 0; + } + + @Specialization(order = 4, guards = "!isInitialized") + public Object doUninitialized(int value) { + throw new AssertionError(); + } + + boolean isInitialized(int value) { + return true; + } + } + + public static final class GenericInt extends ValueNode { + + @Override + public Object execute(VirtualFrame frame) { + return executeInt(frame); + } + + @Override + public int executeInt(VirtualFrame frame) { + return 42; + } + + } + private static class MockAssumption implements Assumption { int checked;