public void visitPhiStmt(final PhiStmt stmt) {
		// a := Phi(b, c)
		// [b] <= [a]
		// [c] <= [a]

		final List back = new ArrayList(stmt.operands().size());

		Iterator e = stmt.operands().iterator();

		while (e.hasNext()) {
			final Expr expr = (Expr) e.next();

			if ((expr instanceof VarExpr) && (expr.def() == null)) {
				back.add(expr);

			} else {
				prop(stmt.target(), expr);
			}
		}

		// Propagate the type back to the operands which are undefined.
		// Otherwise, they won't be able to get a type.
		e = back.iterator();

		while (e.hasNext()) {
			final Expr expr = (Expr) e.next();

			if (expr.def() == null) {
				prop(expr, stmt.target());
			}
		}
	}