diff -r 71a31843f550 -r 4b4841501dd9 src/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java Fri Jun 27 20:32:12 2014 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java Fri Jul 04 16:34:44 2014 +0100 @@ -96,7 +96,7 @@ public final boolean varargsEnabled; public final boolean allowMethodHandles; public final boolean allowFunctionalInterfaceMostSpecific; - public final boolean checkVarargsAccessDuringResolution; + public final boolean checkVarargsAccessAfterResolution; private final boolean debugResolve; private final boolean compactMethodDiags; final EnumSet verboseResolutionMode; @@ -138,7 +138,7 @@ Target target = Target.instance(context); allowMethodHandles = target.hasMethodHandles(); allowFunctionalInterfaceMostSpecific = source.allowFunctionalInterfaceMostSpecific(); - checkVarargsAccessDuringResolution = + checkVarargsAccessAfterResolution = source.allowPostApplicabilityVarargsAccessCheck(); polymorphicSignatureScope = new Scope(syms.noSymbol); @@ -837,13 +837,16 @@ Warner warn) { super.argumentsAcceptable(env, deferredAttrContext, argtypes, formals, warn); //should we expand formals? - if ((!checkVarargsAccessDuringResolution || - (checkVarargsAccessDuringResolution && - deferredAttrContext.mode == AttrMode.CHECK)) && - deferredAttrContext.phase.isVarargsRequired()) { - //check varargs element type accessibility - varargsAccessible(env, types.elemtype(formals.last()), - deferredAttrContext.inferenceContext); + if (deferredAttrContext.phase.isVarargsRequired()) { + Type typeToCheck = null; + if (!checkVarargsAccessAfterResolution) { + typeToCheck = types.elemtype(formals.last()); + } else if (deferredAttrContext.mode == AttrMode.CHECK) { + typeToCheck = types.erasure(types.elemtype(formals.last())); + } + if (typeToCheck != null) { + varargsAccessible(env, typeToCheck, deferredAttrContext.inferenceContext); + } } }