-
Bug
-
Resolution: Fixed
-
P4
-
8
-
b02
-
Verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8045133 | 8u25 | Jan Lahoda | P4 | Resolved | Fixed | b01 |
JDK-8031783 | 8u20 | Jan Lahoda | P4 | Resolved | Fixed | b09 |
JDK-8052572 | emb-8u26 | Jan Lahoda | P4 | Resolved | Fixed | b17 |
Consider code like this:
-----
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class TestTA {
public void test() {
try {
System.err.println("adf");
} catch (@TA1 Exception e) {
} catch (@TA2 Throwable t) {
}
}
}
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface TA1 { }
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface TA2 { }
-----
When compiled like this:
$ javac -g:vars TestTA.java
The result is:
-----
public void test();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=1
0: getstatic #2 // Field java/lang/System.err:Ljava/io/PrintStream;
3: ldc #3 // String adf
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: goto 16
11: astore_1
12: goto 16
15: astore_1
16: return
Exception table:
from to target type
0 8 11 Class java/lang/Exception
0 8 15 Class java/lang/Throwable
LocalVariableTable:
Start Length Slot Name Signature
12 0 1 e Ljava/lang/Exception;
16 0 1 t Ljava/lang/Throwable;
0 17 0 this LTestTA;
StackMapTable: number_of_entries = 3
frame_type = 75 /* same_locals_1_stack_item */
stack = [ class java/lang/Exception ]
frame_type = 67 /* same_locals_1_stack_item */
stack = [ class java/lang/Throwable ]
frame_type = 0 /* same */
RuntimeVisibleTypeAnnotations:
0: #22(): EXCEPTION_PARAMETER, exception_index=0
1: #23(): EXCEPTION_PARAMETER, exception_index=1
-----
Which appears to be correct, but when compiled like this:
$ javac -g:none TestTA.java
The result is (just the relevant attribute):
-----
RuntimeVisibleTypeAnnotations:
0: #15(): EXCEPTION_PARAMETER, exception_index=0
1: #16(): EXCEPTION_PARAMETER, exception_index=0
-----
Note the "exception_index", which is incorrect for the second attribute.
The problem appears to be in Code.putVar:~2195, the:
var.sym.hasTypeAnnotations()
should read:
!var.sym.hasTypeAnnotations()
This was using:
$ javac -fullversion
javac full version "1.8.0-ea-b116"
-----
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class TestTA {
public void test() {
try {
System.err.println("adf");
} catch (@TA1 Exception e) {
} catch (@TA2 Throwable t) {
}
}
}
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface TA1 { }
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface TA2 { }
-----
When compiled like this:
$ javac -g:vars TestTA.java
The result is:
-----
public void test();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=1
0: getstatic #2 // Field java/lang/System.err:Ljava/io/PrintStream;
3: ldc #3 // String adf
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: goto 16
11: astore_1
12: goto 16
15: astore_1
16: return
Exception table:
from to target type
0 8 11 Class java/lang/Exception
0 8 15 Class java/lang/Throwable
LocalVariableTable:
Start Length Slot Name Signature
12 0 1 e Ljava/lang/Exception;
16 0 1 t Ljava/lang/Throwable;
0 17 0 this LTestTA;
StackMapTable: number_of_entries = 3
frame_type = 75 /* same_locals_1_stack_item */
stack = [ class java/lang/Exception ]
frame_type = 67 /* same_locals_1_stack_item */
stack = [ class java/lang/Throwable ]
frame_type = 0 /* same */
RuntimeVisibleTypeAnnotations:
0: #22(): EXCEPTION_PARAMETER, exception_index=0
1: #23(): EXCEPTION_PARAMETER, exception_index=1
-----
Which appears to be correct, but when compiled like this:
$ javac -g:none TestTA.java
The result is (just the relevant attribute):
-----
RuntimeVisibleTypeAnnotations:
0: #15(): EXCEPTION_PARAMETER, exception_index=0
1: #16(): EXCEPTION_PARAMETER, exception_index=0
-----
Note the "exception_index", which is incorrect for the second attribute.
The problem appears to be in Code.putVar:~2195, the:
var.sym.hasTypeAnnotations()
should read:
!var.sym.hasTypeAnnotations()
This was using:
$ javac -fullversion
javac full version "1.8.0-ea-b116"
- backported by
-
JDK-8031783 Incorrect RuntimeVisibleTypeAnnotations for exception parameters when not generating debuging info
-
- Resolved
-
-
JDK-8045133 Incorrect RuntimeVisibleTypeAnnotations for exception parameters when not generating debuging info
-
- Resolved
-
-
JDK-8052572 Incorrect RuntimeVisibleTypeAnnotations for exception parameters when not generating debuging info
-
- Resolved
-