diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 42108e10fb85..396cde32599a 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -578,7 +578,7 @@ object desugar { val clsName = moduleName.moduleClassName val clsRef = Ident(clsName) val modul = ValDef(moduleName, clsRef, New(clsRef, Nil)) - .withMods(mods | ModuleCreationFlags | mods.flags & AccessFlags) + .withMods(mods.toTermFlags & RetainedModuleValFlags | ModuleValCreationFlags) .withPos(mdef.pos.startPos) val ValDef(selfName, selfTpt, _) = impl.self val selfMods = impl.self.mods diff --git a/compiler/src/dotty/tools/dotc/core/Flags.scala b/compiler/src/dotty/tools/dotc/core/Flags.scala index e8f71f8a1c28..4bf05f2fbd0b 100644 --- a/compiler/src/dotty/tools/dotc/core/Flags.scala +++ b/compiler/src/dotty/tools/dotc/core/Flags.scala @@ -472,7 +472,7 @@ object Flags { final val RetainedTypeArgFlags = VarianceFlags | Protected | Local /** Modules always have these flags set */ - final val ModuleCreationFlags = ModuleVal | Lazy | Final | Stable + final val ModuleValCreationFlags = ModuleVal | Lazy | Final | Stable /** Module classes always have these flags set */ final val ModuleClassCreationFlags = ModuleClass | Final @@ -503,7 +503,7 @@ object Flags { /** Flags that can apply to a module val */ final val RetainedModuleValFlags: FlagSet = RetainedModuleValAndClassFlags | Override | Final | Method | Implicit | Lazy | - Accessor | AbsOverride | Stable | Captured | Synchronized + Accessor | AbsOverride | Stable | Captured | Synchronized | Inline /** Flags that can apply to a module class */ final val RetainedModuleClassFlags: FlagSet = RetainedModuleValAndClassFlags | ImplClass | Enum diff --git a/compiler/src/dotty/tools/dotc/core/Symbols.scala b/compiler/src/dotty/tools/dotc/core/Symbols.scala index 2e3661a52039..8cddd2e9d70c 100644 --- a/compiler/src/dotty/tools/dotc/core/Symbols.scala +++ b/compiler/src/dotty/tools/dotc/core/Symbols.scala @@ -153,7 +153,7 @@ trait Symbols { this: Context => modcls, owner, modclsName, modclsFlags, infoFn(module, modcls), privateWithin) val mdenot = SymDenotation( - module, owner, name, modFlags | ModuleCreationFlags, + module, owner, name, modFlags | ModuleValCreationFlags, if (cdenot.isCompleted) TypeRef.withSym(owner.thisType, modcls, modclsName) else new ModuleCompleter(modcls)) module.denot = mdenot diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala index 301883ab4e2a..78a0fe11f16b 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala @@ -382,7 +382,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi if (lacksDefinition && tag != PARAM) flags |= Deferred if (tag == DEFDEF) flags |= Method if (givenFlags is Module) - flags = flags | (if (tag == VALDEF) ModuleCreationFlags else ModuleClassCreationFlags) + flags = flags | (if (tag == VALDEF) ModuleValCreationFlags else ModuleClassCreationFlags) if (ctx.owner.isClass) { if (tag == TYPEPARAM) flags |= Param else if (tag == PARAM) flags |= ParamAccessor diff --git a/compiler/src/dotty/tools/dotc/typer/Namer.scala b/compiler/src/dotty/tools/dotc/typer/Namer.scala index 36216adf06dd..a4e989ad9d7e 100644 --- a/compiler/src/dotty/tools/dotc/typer/Namer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Namer.scala @@ -274,7 +274,7 @@ class Namer { typer: Typer => def preExisting = ctx.effectiveScope.lookup(name) if (ctx.owner is PackageClass) if (preExisting.isDefinedInCurrentRun) - errorName(s"${preExisting.showLocated} has already been compiled\nonce during this run") + errorName(s"${preExisting.showLocated} has already been compiled once during this run") else name else if ((!ctx.owner.isClass || name.isTypeName) && preExisting.exists) diff --git a/tests/pos/i3471.scala b/tests/pos/i3471.scala new file mode 100644 index 000000000000..9bc9e82537db --- /dev/null +++ b/tests/pos/i3471.scala @@ -0,0 +1 @@ +sealed object Fun