changeset 23360:0dee85d7e73e

defend against missing LocalVariableTable method attribute and missing slots in the table
author Doug Simon <doug.simon@oracle.com>
date Thu, 28 Jan 2016 16:24:50 +0100
parents 584975185d36
children 1dc168caec9f
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java
diffstat 1 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Thu Jan 28 11:16:03 2016 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Thu Jan 28 16:24:50 2016 +0100
@@ -51,6 +51,7 @@
 import jdk.vm.ci.meta.JavaConstant;
 import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.Local;
+import jdk.vm.ci.meta.LocalVariableTable;
 import jdk.vm.ci.meta.LocationIdentity;
 import jdk.vm.ci.meta.MetaAccessProvider;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -181,11 +182,16 @@
             private boolean initNames(ResolvedJavaMethod method, int parameterCount) {
                 names = new String[parameterCount];
                 int slotIdx = 0;
-                for (int i = 0; i < names.length; i++) {
-                    names[i] = method.getLocalVariableTable().getLocal(slotIdx, 0).getName();
-
-                    JavaKind kind = method.getSignature().getParameterKind(i);
-                    slotIdx += kind.getSlotCount();
+                LocalVariableTable localVariableTable = method.getLocalVariableTable();
+                if (localVariableTable != null) {
+                    for (int i = 0; i < names.length; i++) {
+                        Local local = localVariableTable.getLocal(slotIdx, 0);
+                        if (local != null) {
+                            names[i] = local.getName();
+                        }
+                        JavaKind kind = method.getSignature().getParameterKind(i);
+                        slotIdx += kind.getSlotCount();
+                    }
                 }
                 return true;
             }