From 5b9d44803b2e0bea37dac684a10c773b48b32490 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 24 Jan 2020 16:19:57 +0100 Subject: [PATCH] Fix #8064: Do not cross cast constructors --- compiler/src/dotty/tools/dotc/transform/CrossCastAnd.scala | 2 +- tests/run/i8064.scala | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 tests/run/i8064.scala diff --git a/compiler/src/dotty/tools/dotc/transform/CrossCastAnd.scala b/compiler/src/dotty/tools/dotc/transform/CrossCastAnd.scala index f23bb3d60b3c..3b9ac6740723 100644 --- a/compiler/src/dotty/tools/dotc/transform/CrossCastAnd.scala +++ b/compiler/src/dotty/tools/dotc/transform/CrossCastAnd.scala @@ -22,7 +22,7 @@ class CrossCastAnd extends MiniPhase { lazy val qtype = tree.qualifier.tpe.widen val sym = tree.symbol - if (sym.is(Flags.Private) && qtype.typeSymbol != sym.owner) + if (sym.is(Flags.Private) && !sym.isConstructor && qtype.typeSymbol != sym.owner) cpy.Select(tree)(tree.qualifier.cast(AndType(qtype.baseType(sym.owner), tree.qualifier.tpe)), tree.name) else tree } diff --git a/tests/run/i8064.scala b/tests/run/i8064.scala new file mode 100644 index 000000000000..6d32e7fc17c7 --- /dev/null +++ b/tests/run/i8064.scala @@ -0,0 +1,4 @@ + +class Foo[A] private(x: Int) { self => def this() = this(0) } + +@main def Test = new Foo[String]()