import testchecker.quals.*;

class Catch {
    void defaultUnionType() throws Throwable {
        try {
            throw new Throwable();
        } catch (IndexOutOfBoundsException | NullPointerException ex) {

        }
    }

    void defaultDeclaredType() throws Throwable {
        try {
            throw new Throwable();
        } catch (RuntimeException ex) {

        }
    }

    void explictlyTopUnionType() throws Throwable {
        try {
            throw new Throwable();
        } catch (@H1Top @H2Top IndexOutOfBoundsException | @H1Top @H2Top NullPointerException ex) {

        }
    }

    void explictlyNotTopUnionType() throws Throwable {
        try {
            throw new Throwable();
            // :: error: (exception.parameter.invalid)
        } catch (@H1S1 @H2Top IndexOutOfBoundsException | @H1S1 @H2Top NullPointerException ex) {

        }
    }

    void explictlyTopDeclaredType() throws Throwable {
        try {
            throw new Throwable();
        } catch (@H1Top @H2Top NullPointerException ex) {

        }
    }

    void explictlyNotTopDeclaredType() throws Throwable {
        try {
            throw new Throwable();
            // :: error: (exception.parameter.invalid)
        } catch (@H1S1 @H2Top RuntimeException ex) {

        }
    }
}
