diff -r 94cfc5b65bed -r 1153590927f7 langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Tue Nov 02 12:01:35 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Thu Nov 04 12:57:48 2010 +0000 @@ -226,7 +226,7 @@ */ Bits uninits; - HashMap> multicatchTypes; + HashMap> preciseRethrowTypes; /** The set of variables that are definitely unassigned everywhere * in current try block. This variable is maintained lazily; it is @@ -332,7 +332,7 @@ if (!chk.isUnchecked(tree.pos(), exc)) { if (!chk.isHandled(exc, caught)) pendingExits.append(new PendingExit(tree, exc)); - thrown = chk.incl(exc, thrown); + thrown = chk.incl(exc, thrown); } } @@ -1077,12 +1077,12 @@ scan(param); inits.incl(param.sym.adr); uninits.excl(param.sym.adr); - multicatchTypes.put(param.sym, chk.intersect(ctypes, rethrownTypes)); + preciseRethrowTypes.put(param.sym, chk.intersect(ctypes, rethrownTypes)); scanStat(l.head.body); initsEnd.andSet(inits); uninitsEnd.andSet(uninits); nextadr = nextadrCatch; - multicatchTypes.remove(param.sym); + preciseRethrowTypes.remove(param.sym); aliveEnd |= alive; } if (tree.finalizer != null) { @@ -1215,10 +1215,10 @@ Symbol sym = TreeInfo.symbol(tree.expr); if (sym != null && sym.kind == VAR && - (sym.flags() & FINAL) != 0 && - multicatchTypes.get(sym) != null && + (sym.flags() & (FINAL | EFFECTIVELY_FINAL)) != 0 && + preciseRethrowTypes.get(sym) != null && allowRethrowAnalysis) { - for (Type t : multicatchTypes.get(sym)) { + for (Type t : preciseRethrowTypes.get(sym)) { markThrown(tree, t); } } @@ -1422,7 +1422,7 @@ firstadr = 0; nextadr = 0; pendingExits = new ListBuffer(); - multicatchTypes = new HashMap>(); + preciseRethrowTypes = new HashMap>(); alive = true; this.thrown = this.caught = null; this.classDef = null;