diff --git a/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala b/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala index a562410b262c..1ca2635eb6a5 100644 --- a/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala +++ b/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala @@ -771,7 +771,7 @@ object PatternMatcher { val expectedClass = expectedTp.dealias.classSymbol.asClass ExplicitOuter.ensureOuterAccessors(expectedClass) scrutinee.ensureConforms(expectedTp) - .outerSelect(1, expectedOuter.tpe.widen) + .outerSelect(1, expectedClass.owner.typeRef) .select(defn.Object_eq) .appliedTo(expectedOuter) } diff --git a/tests/run/i3548.scala b/tests/run/i3548.scala new file mode 100644 index 000000000000..5dc6739934b8 --- /dev/null +++ b/tests/run/i3548.scala @@ -0,0 +1,20 @@ +trait Common { + case class Data(a: String) +} +object O1 extends Common +object O2 extends Common + +object Test { + def main(args: Array[String]): Unit = { + + val data = O2.Data("test") + + val result = data match { + case O1.Data(s) => 1 + case O2.Data(s) => 2 + case _ => 3 + } + + assert(result == 2) + } +} \ No newline at end of file