aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/SymDenotations.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/SymDenotations.scala10
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/SymDenotations.scala b/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
index aaae78c57..a3475e14c 100644
--- a/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -45,9 +45,13 @@ trait SymDenotations { this: Context =>
else {
val initial = denot.initial
val firstPhaseId = initial.validFor.firstPhaseId.max(ctx.typerPhase.id)
- if ((initial ne denot) || ctx.phaseId != firstPhaseId)
- ctx.withPhase(firstPhaseId).stillValidInOwner(initial)
- else
+ if ((initial ne denot) || ctx.phaseId != firstPhaseId) {
+ ctx.withPhase(firstPhaseId).stillValidInOwner(initial) ||
+ // Workaround #1895: A symbol might not be entered into an owner
+ // until the second phase where it exists
+ (denot.validFor.containsPhaseId(firstPhaseId + 1)) &&
+ ctx.withPhase(firstPhaseId + 1).stillValidInOwner(initial)
+ } else
stillValidInOwner(denot)
}