Fixed Bugzilla bug 69: Reachability for catch blocks incorrect
Fixed Bugzilla bug 69: Reachability for catch blocks incorrect

The description of the bug:

In the following code, Polyglot declares the statement (*) to be unreachable:

	try {
            // may throw a FileNotFoundException
	    new FileOutputStream("file");
	} 
	catch(FileNotFoundException ee) {
	    return false;
	} 
	catch(IOException ee) {
	    return false; // (*) unreachable according to Polyglot
	}

This is because the try block can only throw a FileNotFoundException. There is
no exception that can be thrown that will be caught by the second catch block.
However, the JLS (Sec 14.20) declares that a catch block C is reachable iff both
of the following are true:
- Some expression or throw statement in the try block is reachable and can throw
an exception whose type is assignable to the parameter of the catch clause C. 
- There is no earlier catch block A in the try statement such that the type of
C's parameter is the same as or a subclass of the type of A's parameter.

Since the second catch block satisfies both of these requirements, it should be
considered reachable. We need to modify our control flow graphs to agree with this.

blue-systems-group/project.maybe.polyglot,xcv58/polyglot,xcv58/polyglot,xcv58/polyglot,xcv58/polyglot,blue-systems-group/project.maybe.polyglot,liujed/polyglot-eclipse,blue-systems-group/project.maybe.polyglot,liujed/polyglot-eclipse,blue-systems-group/project.maybe.polyglot,liujed/polyglot-eclipse,liujed/polyglot-eclipse