The following program is required to be accepted under the current
rules for definite unassignment. See also spec bug 4718141.
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();
while (true) {}
} catch (E e) {}
}
}
}
also
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;
}
}
}
}
rules for definite unassignment. See also spec bug 4718141.
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();
while (true) {}
} catch (E e) {}
}
}
}
also
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-4718141 16: DU/DA analysis should be more conservative in loops
- Open