Mercurial > hg > graal-compiler
changeset 6381:c61ce6bac1df
Merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 13 Sep 2012 12:59:27 +0200 |
parents | 4df5ec0f8082 (current diff) a718f153b9f2 (diff) |
children | d44835610b52 69e94aa204b7 |
files | src/share/vm/graal/graalCompilerToVM.cpp |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Thu Sep 13 11:29:18 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Thu Sep 13 12:59:27 2012 +0200 @@ -279,7 +279,15 @@ return canBeInlined; } + /** + * Returns the offset of this method into the v-table. + * If the holder is not initialized, returns -1 + * @return the offset of this method into the v-table + */ public int vtableEntryOffset() { + if (!holder.isInitialized()) { + return -1; + } return HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaMethod_vtableEntryOffset(this); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Sep 13 11:29:18 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Sep 13 12:59:27 2012 +0200 @@ -254,7 +254,7 @@ // We use LocationNode.ANY_LOCATION for the reads that access the vtable entry and the compiled code entry // as HotSpot does not guarantee they are final values. int vtableEntryOffset = hsMethod.vtableEntryOffset(); - assert vtableEntryOffset != 0; + assert vtableEntryOffset > 0; SafeReadNode hub = safeReadHub(graph, receiver, StructuredGraph.INVALID_GRAPH_ID); Kind wordKind = graalRuntime.getTarget().wordKind; Stamp nonNullWordStamp = StampFactory.forWord(wordKind, true);
--- a/src/share/vm/graal/graalCompilerToVM.cpp Thu Sep 13 11:29:18 2012 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Thu Sep 13 12:59:27 2012 +0200 @@ -857,6 +857,7 @@ methodOop method = getMethodFromHotSpotMethod(hotspot_method); assert(!instanceKlass::cast(method->method_holder())->is_interface(), "vtableEntryOffset cannot be called for interface methods"); + assert(instanceKlass::cast(method->method_holder())->is_linked(), "vtableEntryOffset cannot be called is holder is not linked"); // get entry offset in words int vtable_entry_offset = instanceKlass::vtable_start_offset() + method->vtable_index() * vtableEntry::size();