# HG changeset patch # User Bernhard Urban # Date 1364897655 -7200 # Node ID 5a40a5509bac72b65a98e018f50a70a7a0df556f # Parent 5a3703970e3f7819d032e4d7905830199d0d6148 unsafeCast: anchor cast after initialization of an object diff -r 5a3703970e3f -r 5a40a5509bac graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java --- 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 diff -r 5a3703970e3f -r 5a40a5509bac graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java --- 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 unsafeCast(Object object, @ConstantNodeParameter Stamp stamp); - - @NodeIntrinsic public static native T unsafeCast(Object object, @ConstantNodeParameter Stamp stamp, ValueNode anchor); @SuppressWarnings("unused")