Mercurial > hg > graal-compiler
changeset 8599:5a40a5509bac
unsafeCast: anchor cast after initialization of an object
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Tue, 02 Apr 2013 12:14:15 +0200 |
parents | 5a3703970e3f |
children | db2b8fbbf8fc |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java |
diffstat | 2 files changed, 5 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Tue Apr 02 11:53:01 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Tue Apr 02 12:14:15 2013 +0200 @@ -91,7 +91,11 @@ } result = memory.toObject(); } - return unsafeCast(verifyOop(result), StampFactory.forNodeIntrinsic()); + /** + * make sure that the unsafeCast is anchored after initialization, + * cf. {@link ReadAfterCheckCast} and {@link CheckCastSnippets} */ + BeginNode anchorNode = BeginNode.anchor(StampFactory.forNodeIntrinsic()); + return unsafeCast(verifyOop(result), StampFactory.forNodeIntrinsic(), anchorNode); } @Snippet
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Tue Apr 02 11:53:01 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Tue Apr 02 12:14:15 2013 +0200 @@ -112,9 +112,6 @@ } @NodeIntrinsic - public static native <T> T unsafeCast(Object object, @ConstantNodeParameter Stamp stamp); - - @NodeIntrinsic public static native <T> T unsafeCast(Object object, @ConstantNodeParameter Stamp stamp, ValueNode anchor); @SuppressWarnings("unused")