public boolean notSoftSubtype(Type t, Type s) {
        if (t == s) return false;
        if (t.tag == TYPEVAR) {
            TypeVar tv = (TypeVar) t;
            return !isCastable(tv.bound,
                               relaxBound(s),
                               Warner.noWarnings);
        }
        if (s.tag != WILDCARD)
            s = upperBound(s);

        return !isSubtype(t, relaxBound(s));
    }