-
Bug
-
Resolution: Unresolved
-
P4
-
1.4.0
-
Fix Understood
The following spec bug is submitted in further support of the changes
described in the evaluation of 4661694.
The following program is required to be accepted under the current
rules for definite unassignment. Yet this program repeatedly assigns
to a final variable.
class T {
static class E extends Exception {}
static void thr() throws E {
throw new E();
}
public static void main(String[] args) {
int count = 0;
final int i;
while (true) {
try {
i = count++;
System.out.println("assigned " + i);
thr();
return;
} catch (E e) {}
}
}
}
Here's another problem with DU analysis for break:
class U {
public static void main(String[] args) {
final int i;
for (int n=0; n<10; n++) {
b: {
try {
if (true) break b;
} finally {
i = n;
System.out.println("i = " + i);
}
return;
}
}
}
}
described in the evaluation of 4661694.
The following program is required to be accepted under the current
rules for definite unassignment. Yet this program repeatedly assigns
to a final variable.
class T {
static class E extends Exception {}
static void thr() throws E {
throw new E();
}
public static void main(String[] args) {
int count = 0;
final int i;
while (true) {
try {
i = count++;
System.out.println("assigned " + i);
thr();
return;
} catch (E e) {}
}
}
}
Here's another problem with DU analysis for break:
class U {
public static void main(String[] args) {
final int i;
for (int n=0; n<10; n++) {
b: {
try {
if (true) break b;
} finally {
i = n;
System.out.println("i = " + i);
}
return;
}
}
}
}
- relates to
-
JDK-4718142 DU analysis not conservative for try-finally
- Resolved