// Test case for issue #775
// https://github.com/typetools/checker-framework/issues/775
public class UnionCrash {
  void foo(MyInterface<Throwable> param) throws Throwable {
    try {
      bar();
    } catch (MyExceptionA | MyExceptionB ex1) {
      try {
        bar();
      } catch (SubMyExceptionA | MyExceptionB ex2) {
        // This call cause a crash
        typeVar(ex1, ex2);
      }
    }
  }

  <T extends Throwable> void typeVar(T param, T param2) {}

  void bar() throws MyExceptionA, MyExceptionB {}

  interface MyInterface<T> {}

  class MyExceptionA extends Throwable implements Cloneable, MyInterface<String> {}

  class MyExceptionB extends Throwable implements Cloneable, MyInterface<String> {}

  class SubMyExceptionA extends MyExceptionA {}
}
