diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 695795c878db..961d63814c7b 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -629,9 +629,12 @@ object desugar { (creatorExpr /: widenDefs)((rhs, meth) => Apply(Ident(meth.name), rhs :: Nil)) val applyMeths = if (mods is Abstract) Nil - else - DefDef(nme.apply, derivedTparams, derivedVparamss, applyResultTpt, widenedCreatorExpr) - .withFlags(Synthetic | constr1.mods.flags & (DefaultParameterized | copiedAccessFlags)) :: widenDefs + else { + val copiedFlagsMask = DefaultParameterized | (copiedAccessFlags & Private) + val app = DefDef(nme.apply, derivedTparams, derivedVparamss, applyResultTpt, widenedCreatorExpr) + .withFlags(Synthetic | constr1.mods.flags & copiedFlagsMask) + app :: widenDefs + } val unapplyMeth = { val unapplyParam = makeSyntheticParameter(tpt = classTypeRef) val unapplyRHS = if (arity == 0) Literal(Constant(true)) else Ident(unapplyParam.name) diff --git a/tests/pos/i5827.scala b/tests/pos/i5827.scala new file mode 100644 index 000000000000..83f7571ec4b8 --- /dev/null +++ b/tests/pos/i5827.scala @@ -0,0 +1,3 @@ +case class Foo protected(a: Int) + +case class Bar private(a: Int) \ No newline at end of file