Mercurial > hg > graal-jvmci-8
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) {