Hi All,

   Ok in my case the ASMifier helped me solve my problem with my
modifications to jacoco's ASM code.   I needed a POP instead of a ASTORE
and also had some issues calculating the max stack size (ended up creating
a StackHelper).

This code will end up at tests4j_4jacoco on git hub at some point,
hopefully in May.

Cheers,
Scott



---------- Forwarded message ----------
From: Scott Morgan <[email protected]>
Date: Sat, Apr 19, 2014 at 8:40 PM
Subject: java.lang.VerifyError: Inconsistent stackmap frames at branch
target 105 in method
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.testDefaultParams()V
at offset 75
To: [email protected]


Hi,

   I am rather new to using ASM (about 3 days).  I am trying to modify some
classes from jacoco so that it uses a java.util.Map interface to store it's
data instead of a boolean[].  I am planning to implement the Map my self,
this is so that I can record code coverage at different levels (i.e.
Coverage for a test run, Coverage for a specific test class, Coverage for a
specific test method).
   Things are going ok, but I am getting the following error;

java.lang.VerifyError: Inconsistent stackmap frames at branch target 105 in
method
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.testDefaultParams()V
at offset 75

Attached is the view of the instrumented class from eclipse (which fails),
which looks ok to me.

Does anyone have any advice on fixing a issue like this?

When I compare it to a instrumented class that works I can't see much of a
difference between the goto (line 75), line 105 and the goto in the working
class.   I have two ways of instrumenting the code in the project I am
working on (they share most of the same methods exc).   One is like jacoco
(where a boolean[] stores coverage data), the other uses a Map.

I have been searching and reading about stackmap frames all over (JVM spec,
web exc) but can't seem to figure out how to fix the issue as the byte code
seems ok to me.

TIA,
Scott

-- 
You received this message because you are subscribed to the Google Groups 
"JaCoCo and EclEmma Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
// Compiled from Tests4J_ParamsTrial.java (version 1.7 : 51.0, super bit)
@org.adligo.tests4j.models.shared.SourceFileScope(sourceClass=org.adligo.tests4j.models.shared.system.Tests4J_Params)
public class org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial 
extends org.adligo.tests4j.models.shared.SourceFileTrial {
  
  // Field descriptor #92 Ljava/util/Map;
  private static transient synthetic java.util.Map $jacocoData;
  
  // Method descriptor #6 ()V
  // Stack: 5, Locals: 2
  public Tests4J_ParamsTrial();
     0  invokestatic 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit() 
: java.util.Map [72]
     3  astore_1
     4  aload_0 [this]
     5  invokespecial org.adligo.tests4j.models.shared.SourceFileTrial() [8]
     8  aload_1
     9  dup
    10  ldc <Integer 0> [73]
    12  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    15  ldc <String "true"> [75]
    17  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
    20  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) : 
java.lang.Object [86] [nargs: 3]
    25  astore_1
    26  return
      Line numbers:
        [pc: 4, line: 13]
      Local variable table:
        [pc: 4, pc: 27] local: this index: 0 type: 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
  
  // Method descriptor #6 ()V
  // Stack: 7, Locals: 5
  @org.adligo.tests4j.models.shared.Test
  public void testDefaultParams();
      0  invokestatic 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit() 
: java.util.Map [72]
      3  astore_1
      4  new org.adligo.tests4j.models.shared.system.Tests4J_Params [17]
      7  dup
      8  invokespecial org.adligo.tests4j.models.shared.system.Tests4J_Params() 
[19]
     11  astore_2 [params]
     12  aload_2 [params]
     13  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.getTrials() : 
java.util.List [20]
     16  astore_3 [trials]
     17  aload_0 [this]
     18  aload_3 [trials]
     19  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertNotNull(java.lang.Object)
 : void [24]
     22  aload_0 [this]
     23  iconst_0
     24  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     27  aload_3 [trials]
     28  invokeinterface java.util.List.size() : int [34] [nargs: 1]
     33  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     36  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
     39  aload_0 [this]
     40  iconst_0
     41  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     44  aload_2 [params]
     45  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() : 
int [44]
     48  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     51  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
     54  iconst_0
     55  istore 4 [i]
     57  aload_1
     58  dup
     59  ldc <Integer 1> [87]
     61  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     64  ldc <String "true"> [75]
     66  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
     69  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
     74  astore_1
     75  goto 105
     78  aload_2 [params]
     79  ldc <Class 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
     81  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.addTrial(java.lang.Class)
 : void [47]
     84  iinc 4 1 [i]
     87  aload_1
     88  dup
     89  ldc <Integer 2> [88]
     91  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     94  ldc <String "true"> [75]
     96  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
     99  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
    104  astore_1
    105  iload 4 [i]
    107  bipush 32
    109  if_icmplt 78
    112  aload_0 [this]
    113  bipush 32
    115  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    118  aload_2 [params]
    119  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() : 
int [44]
    122  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    125  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
    128  aload_1
    129  dup
    130  ldc <Integer 3> [89]
    132  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    135  ldc <String "true"> [75]
    137  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
    140  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
    145  astore_1
    146  return
      Line numbers:
        [pc: 4, line: 17]
        [pc: 12, line: 19]
        [pc: 17, line: 20]
        [pc: 22, line: 21]
        [pc: 39, line: 22]
        [pc: 54, line: 24]
        [pc: 78, line: 25]
        [pc: 84, line: 24]
        [pc: 112, line: 27]
        [pc: 128, line: 29]
      Local variable table:
        [pc: 4, pc: 147] local: this index: 0 type: 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
        [pc: 12, pc: 147] local: params index: 2 type: 
org.adligo.tests4j.models.shared.system.Tests4J_Params
        [pc: 17, pc: 147] local: trials index: 3 type: java.util.List
        [pc: 57, pc: 112] local: i index: 4 type: int
      Local variable type table:
        [pc: 17, pc: 147] local: trials index: 3 type: 
java.util.List<java.lang.Class<? extends 
org.adligo.tests4j.models.shared.I_AbstractTrial>>
      Stack map table: number of frames 2
        [pc: 78, full, stack: {}, locals: 
{org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial, 
java.util.Map, org.adligo.tests4j.models.shared.system.Tests4J_Params, 
java.util.List, int}]
        [pc: 105, same]
  
  // Method descriptor #6 ()V
  // Stack: 8, Locals: 4
  @org.adligo.tests4j.models.shared.Test
  public void testOneTrialRunParams();
     0  invokestatic 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit() 
: java.util.Map [72]
     3  astore_1
     4  new org.adligo.tests4j.models.shared.system.Tests4J_Params [17]
     7  dup
     8  invokespecial org.adligo.tests4j.models.shared.system.Tests4J_Params() 
[19]
    11  astore_2 [params]
    12  aload_2 [params]
    13  ldc <Class 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
    15  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.addTrial(java.lang.Class)
 : void [47]
    18  aload_2 [params]
    19  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.getTrials() : 
java.util.List [20]
    22  astore_3 [trials]
    23  aload_0 [this]
    24  aload_3 [trials]
    25  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertNotNull(java.lang.Object)
 : void [24]
    28  aload_0 [this]
    29  iconst_1
    30  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    33  aload_3 [trials]
    34  invokeinterface java.util.List.size() : int [34] [nargs: 1]
    39  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    42  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
    45  aload_0 [this]
    46  ldc <Class 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
    48  aload_3 [trials]
    49  iconst_0
    50  invokeinterface java.util.List.get(int) : java.lang.Object [61] [nargs: 
2]
    55  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
    58  aload_0 [this]
    59  iconst_1
    60  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    63  aload_2 [params]
    64  invokevirtual 
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() : 
int [44]
    67  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    70  invokevirtual 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
 java.lang.Object) : void [40]
    73  aload_1
    74  dup
    75  ldc <Integer 4> [90]
    77  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    80  ldc <String "true"> [75]
    82  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
    85  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) : 
java.lang.Object [86] [nargs: 3]
    90  astore_1
    91  return
      Line numbers:
        [pc: 4, line: 33]
        [pc: 12, line: 34]
        [pc: 18, line: 36]
        [pc: 23, line: 37]
        [pc: 28, line: 38]
        [pc: 45, line: 39]
        [pc: 58, line: 40]
        [pc: 73, line: 41]
      Local variable table:
        [pc: 4, pc: 92] local: this index: 0 type: 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
        [pc: 12, pc: 92] local: params index: 2 type: 
org.adligo.tests4j.models.shared.system.Tests4J_Params
        [pc: 23, pc: 92] local: trials index: 3 type: java.util.List
      Local variable type table:
        [pc: 23, pc: 92] local: trials index: 3 type: 
java.util.List<java.lang.Class<? extends 
org.adligo.tests4j.models.shared.I_AbstractTrial>>
  
  // Method descriptor #70 ()Ljava/util/Map;
  // Stack: 5, Locals: 0
  private static final synthetic java.util.Map $jacocoInit();
      0  getstatic 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoData : 
java.util.Map [94]
      3  dup
      4  ifnonnull 139
      7  pop
      8  iconst_3
      9  anewarray java.lang.Object [96]
     12  dup
     13  iconst_0
     14  ldc2_w <Long -1055800533023415181> [97]
     17  invokestatic java.lang.Long.valueOf(long) : java.lang.Long [103]
     20  aastore
     21  dup
     22  iconst_1
     23  ldc <String 
"org/adligo/tests4j_tests/models/shared/system/Tests4J_ParamsTrial"> [104]
     25  aastore
     26  dup
     27  iconst_2
     28  iconst_5
     29  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     32  aastore
     33  dup
     34  ldc <String "tests4j_4jacoco_channel"> [106]
     36  invokestatic java.util.logging.Logger.getLogger(java.lang.String) : 
java.util.logging.Logger [112]
     39  swap
     40  getstatic java.util.logging.Level.INFO : java.util.logging.Level [118]
     43  swap
     44  ldc <String "57142653"> [120]
     46  swap
     47  invokevirtual java.util.logging.Logger.log(java.util.logging.Level, 
java.lang.String, java.lang.Object[]) : void [124]
     50  iconst_0
     51  aaload
     52  checkcast java.util.Map [82]
     55  dup
     56  ldc <Integer 0> [73]
     58  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     61  ldc <String "false"> [126]
     63  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
     66  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
     71  dup
     72  ldc <Integer 1> [87]
     74  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     77  ldc <String "false"> [126]
     79  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
     82  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
     87  dup
     88  ldc <Integer 2> [88]
     90  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
     93  ldc <String "false"> [126]
     95  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
     98  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
    103  dup
    104  ldc <Integer 3> [89]
    106  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    109  ldc <String "false"> [126]
    111  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
    114  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
    119  dup
    120  ldc <Integer 4> [90]
    122  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
    125  ldc <String "false"> [126]
    127  invokestatic java.lang.Boolean.valueOf(java.lang.String) : 
java.lang.Boolean [80]
    130  invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) 
: java.lang.Object [86] [nargs: 3]
    135  dup
    136  putstatic 
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoData : 
java.util.Map [94]
    139  areturn
    Stack map table: number of frames 1
        [pc: 139, same_locals_1_stack_item_extended, stack: {java.util.Map}]

}

Reply via email to