Please review the change that fixes an intermittent failure of the test when 
running with Graal on.

The test creates exception requests for different kinds of exceptions and 
errors, starts the debuggee that throws an exception, and listens for exception 
events. If the number of received exception events is not equal to 1 the test 
fails. For the case when the exception request is created for java.lang.Error 
class  the test intermittently fails if Graal is on. It happens because, 
sometimes, in addition to StackOverflowError thrown by the test itself, 
jdk.vm.ci.common.JVMCIError is thrown from method getField() in class 
jdk.vm.ci.hotspot .HotSpotVMConfigAccess at line 252 
(src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfigAccess.java)

240         private VMField getField(String name, String cppType, boolean 
required) {
   241          VMField entry = store.vmFields.get(name);
   242          if (entry == null) {
   243              if (!required) {
   244                  return null;
   245              }
   246              store.printConfig();
   247              throw new JVMCIError("expected VM field not found in " + 
store + ": " + name);
   248          }
   249  
   250          // Make sure the native type is still the type we expect.
   251          if (cppType != null && !cppType.equals(entry.type)) {
   252              throw new JVMCIError("expected type " + cppType + " but VM 
field " + name + " is of type " + entry.type);
   253          }
   254          return entry;
   255      }

that in one case is caught at line 412 in 
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java

   404      public final int pendingFailedSpeculationOffset;
   405      {
   406          String name = "JavaThread::_pending_failed_speculation";
   407          int offset = -1;
   408          try {
   409              offset = getFieldOffset(name, Integer.class, "jlong");
   410          } catch (JVMCIError e) {
   411              try {
   412                  offset = getFieldOffset(name, Integer.class, "long");
   413              } catch (JVMCIError e2) {
   414              }
   415          }
   416          if (offset == -1) {
   417              throw new JVMCIError("cannot get offset of field " + name + 
" with type long or jlong");
   418          }
   419          pendingFailedSpeculationOffset = offset;
   420      }

and in other case at line 229 in the same class 
(src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java)

221         public final int classMirrorOffset;
   222      {
   223          String name = "Klass::_java_mirror";
   224          int offset = -1;
   225          boolean isHandle = false;
   226          try {
   227              offset = getFieldOffset(name, Integer.class, "oop");
   228          } catch (JVMCIError e) {
   229  
   230          }
   231          if (offset == -1) {
   232              try {
   233                  offset = getFieldOffset(name, Integer.class, "jobject");
   234                  isHandle = true;
   235              } catch (JVMCIError e) {
   236                  try {
   237                      // JDK-8186777
   238                      offset = getFieldOffset(name, Integer.class, 
"OopHandle");
   239                      isHandle = true;
   240                  } catch (JVMCIError e2) {
   241                  }
   242              }
   243          }
   244          if (offset == -1) {
   245              throw new JVMCIError("cannot get offset of field " + name + 
" with type oop, jobject or OopHandle");
   246          }
   247          classMirrorOffset = offset;
   248          classMirrorIsHandle = isHandle;
   249      }

That results in the number of received exception events exceeds 1 and the test 
fails. 

To ignore these unexpected events the fix adds "jdk.vm.ci.hotspot.*"  class 
exclusion filter when it creates an exception request.

Webrev: http://cr.openjdk.java.net/~dtitov/8222821/webrev.01/
Bug: https://bugs.openjdk.java.net/browse/JDK-8222821 

Thanks!
-Daniil



Reply via email to