Mercurial > hg > graal-compiler
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; }