changeset 13609:14db6fb488a0

UnsafeAllocTest: fix stamp problem
author Bernhard Urban <bernhard.urban@jku.at>
date Mon, 13 Jan 2014 10:42:55 +0100
parents e4678d498846
children 6537a75007e3
files graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/UnsafeAllocateInstance01.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/ObjectStamp.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java
diffstat 3 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/UnsafeAllocateInstance01.java	Mon Jan 13 09:10:54 2014 +0100
+++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/UnsafeAllocateInstance01.java	Mon Jan 13 10:42:55 2014 +0100
@@ -74,7 +74,6 @@
     }
 
     @Test
-    @Ignore("abstract type isn't allowed by ObjectStamp")
     public void run2() throws Throwable {
         runTest("testClassForException", AbstractList.class);
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/ObjectStamp.java	Mon Jan 13 09:10:54 2014 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/ObjectStamp.java	Mon Jan 13 10:42:55 2014 +0100
@@ -37,7 +37,7 @@
 
     public ObjectStamp(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean alwaysNull) {
         super(Kind.Object);
-        assert !exactType || (type != null && (!Modifier.isAbstract(type.getModifiers()) || type.isArray()));
+        assert !exactType || (type != null && (isConcreteType(type)));
         this.type = type;
         this.exactType = exactType;
         this.nonNull = nonNull;
@@ -198,7 +198,7 @@
         }
         if (joinAlwaysNull && joinNonNull) {
             return StampFactory.illegal(Kind.Object);
-        } else if (joinExactType && Modifier.isAbstract(joinType.getModifiers()) && !joinType.isArray()) {
+        } else if (joinExactType && !isConcreteType(joinType)) {
             return StampFactory.illegal(Kind.Object);
         }
         if (joinType == type && joinExactType == exactType && joinNonNull == nonNull && joinAlwaysNull == alwaysNull) {
@@ -210,6 +210,10 @@
         }
     }
 
+    public static boolean isConcreteType(ResolvedJavaType type) {
+        return !(Modifier.isAbstract(type.getModifiers()) && !type.isArray());
+    }
+
     private static ResolvedJavaType meetTypes(ResolvedJavaType a, ResolvedJavaType b) {
         if (a == b) {
             return a;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java	Mon Jan 13 09:10:54 2014 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java	Mon Jan 13 10:42:55 2014 +0100
@@ -218,7 +218,11 @@
     }
 
     public static Stamp exactNonNull(ResolvedJavaType type) {
-        return new ObjectStamp(type, true, true, false);
+        if (ObjectStamp.isConcreteType(type)) {
+            return new ObjectStamp(type, true, true, false);
+        } else {
+            return illegal(Kind.Object);
+        }
     }
 
     public static Stamp exact(ResolvedJavaType type) {