Hello everyone, Evgeny Mandrikov (from JaCoCo) sent me a message regarding dead code produced by Groovy 2.5.4 (see https://github.com/jacoco/jacoco/pull/733#issuecomment-440030323 in context).
Reproducing full message: @aalmiray <https://github.com/aalmiray> while playing further with Groovy, I noticed that groovyc 2.5.4 generates dead bytecode for the following Example.groovy Closure closure = { println("Hello,") println("World!") } closure() here is corresponding part from javap -v -p Example\$_run_closure1 output public java.lang.Object doCall(java.lang.Object); descriptor: (Ljava/lang/Object;)Ljava/lang/Object; flags: ACC_PUBLIC Code: stack=3, locals=3, args_size=2 0: invokestatic #22 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite; 3: astore_2 4: aload_2 5: ldc #32 // int 0 7: aaload 8: aload_0 9: ldc #34 // String Hello, 11: invokeinterface #40, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object; 16: pop 17: aload_2 18: ldc #41 // int 1 20: aaload 21: aload_0 22: ldc #43 // String World! 24: invokeinterface #40, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object; 29: areturn 30: nop 31: athrow StackMapTable: number_of_entries = 1 frame_type = 255 /* full_frame */ offset_delta = 30 locals = [] stack = [ class java/lang/Throwable ] LineNumberTable: line 2: 4 line 3: 17 LocalVariableTable: Start Length Slot Name Signature 0 30 0 this LExample$_run_closure1; 0 30 1 it Ljava/lang/Object; instructions at offsets 30 and 31 are not reachable, therefore line 3 that starts at instruction with offset 17 will always be marked as uncovered. Any ideas on what may be causing this behavior? Cheers, Andres ------------------------------------------- Java Champion; Groovy Enthusiast JCP EC Associate Seat http://andresalmiray.com http://www.linkedin.com/in/aalmiray -- What goes up, must come down. Ask any system administrator. There are 10 types of people in the world: Those who understand binary, and those who don't. To understand recursion, we must first understand recursion.