diff -r f4fdd53f8b3e -r 7ac9242d2ca6 src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Thu Feb 21 15:23:48 2013 +0000 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Thu Feb 21 15:25:03 2013 +0000 @@ -580,7 +580,17 @@ for (Type t : formalInterface.getTypeArguments()) { if (actualTypeargs.head.hasTag(WILDCARD)) { WildcardType wt = (WildcardType)actualTypeargs.head; - typeargs.append(wt.type); + Type bound; + switch (wt.kind) { + case UNBOUND: + //use declared bound if it doesn't depend on formal type-args + bound = wt.bound.bound.containsAny(formalInterface.getTypeArguments()) ? + syms.objectType : wt.bound.bound; + break; + default: + bound = wt.type; + } + typeargs.append(bound); } else { typeargs.append(actualTypeargs.head); }