diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala | 7 | ||||
-rw-r--r-- | test/files/neg/t4425.check | 4 | ||||
-rw-r--r-- | test/files/neg/t4425.scala | 4 | ||||
-rw-r--r-- | test/files/pos/t4524.scala | 9 |
4 files changed, 23 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala index 5b4a5b3c44..8e286ca983 100644 --- a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala +++ b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala @@ -189,7 +189,12 @@ trait NamesDefaults { self: Analyzer => } else { val module = companionModuleOf(baseFun.symbol.owner, context) if (module == NoSymbol) None - else Some(atPos(pos.focus)(gen.mkAttributedRef(pre, module))) + else { + val ref = atPos(pos.focus)(gen.mkAttributedRef(pre, module)) + if (module.isStable && pre.isStable) // fixes #4524. the type checker does the same for + ref.setType(singleType(pre, module)) // typedSelect, it calls "stabilize" on the result. + Some(ref) + } } } diff --git a/test/files/neg/t4425.check b/test/files/neg/t4425.check new file mode 100644 index 0000000000..4ff4b1eec0 --- /dev/null +++ b/test/files/neg/t4425.check @@ -0,0 +1,4 @@ +t4425.scala:3: error: erroneous or inaccessible type + 42 match { case _ X _ => () } + ^ +one error found diff --git a/test/files/neg/t4425.scala b/test/files/neg/t4425.scala new file mode 100644 index 0000000000..d8cc6922f7 --- /dev/null +++ b/test/files/neg/t4425.scala @@ -0,0 +1,4 @@ +object Foo { + object X { def unapply(x : Int)(y : Option[Int] = None) = None } + 42 match { case _ X _ => () } +} diff --git a/test/files/pos/t4524.scala b/test/files/pos/t4524.scala new file mode 100644 index 0000000000..4721a7d067 --- /dev/null +++ b/test/files/pos/t4524.scala @@ -0,0 +1,9 @@ +object test { + import A._ + class A(b: B = new A.B()) + object A { + class B + new A() + } +} + |