1.1 --- a/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Tue Sep 09 10:43:06 2014 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Jul 09 10:49:32 2014 -0400 1.3 @@ -497,13 +497,11 @@ 1.4 } 1.5 } 1.6 if (!progress) { 1.7 - DeferredAttrContext dac = this; 1.8 - while (dac != emptyDeferredAttrContext) { 1.9 - if (dac.mode == AttrMode.SPECULATIVE) { 1.10 - //unsticking does not take place during overload 1.11 - break; 1.12 + if (insideOverloadPhase()) { 1.13 + for (DeferredAttrNode deferredNode: deferredAttrNodes) { 1.14 + deferredNode.dt.tree.type = Type.noType; 1.15 } 1.16 - dac = dac.parent; 1.17 + return; 1.18 } 1.19 //remove all variables that have already been instantiated 1.20 //from the list of stuck variables 1.21 @@ -519,6 +517,17 @@ 1.22 } 1.23 } 1.24 } 1.25 + 1.26 + private boolean insideOverloadPhase() { 1.27 + DeferredAttrContext dac = this; 1.28 + if (dac == emptyDeferredAttrContext) { 1.29 + return false; 1.30 + } 1.31 + if (dac.mode == AttrMode.SPECULATIVE) { 1.32 + return true; 1.33 + } 1.34 + return dac.parent.insideOverloadPhase(); 1.35 + } 1.36 } 1.37 1.38 /** 1.39 @@ -579,6 +588,8 @@ 1.40 return false; 1.41 } 1.42 } else { 1.43 + Assert.check(!deferredAttrContext.insideOverloadPhase(), 1.44 + "attribution shouldn't be happening here"); 1.45 ResultInfo instResultInfo = 1.46 resultInfo.dup(deferredAttrContext.inferenceContext.asInstType(resultInfo.pt)); 1.47 dt.check(instResultInfo, dummyStuckPolicy, basicCompleter);