@@ -2472,6 +2472,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
24722472
24732473 def typedValDef (vdef : untpd.ValDef , sym : Symbol )(using Context ): Tree = {
24742474 val ValDef (name, tpt, _) = vdef
2475+ checkNonRootName(vdef.name, vdef.nameSpan)
24752476 completeAnnotations(vdef, sym)
24762477 if (sym.isOneOf(GivenOrImplicit )) checkImplicitConversionDefOK(sym)
24772478 if sym.is(Module ) then checkNoModuleClash(sym)
@@ -2505,6 +2506,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
25052506 // hence we special case it until `erased` is no longer experimental.
25062507 sym.setFlag(Erased )
25072508 val DefDef (name, paramss, tpt, _) = ddef
2509+ checkNonRootName(ddef.name, ddef.nameSpan)
25082510 completeAnnotations(ddef, sym)
25092511 val paramss1 = paramss.nestedMapConserve(typed(_)).asInstanceOf [List [ParamClause ]]
25102512 for case ValDefs (vparams) <- paramss1 do
@@ -2853,6 +2855,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
28532855 val pkg = pid1.symbol
28542856 pid1 match
28552857 case pid1 : RefTree if pkg.is(Package ) =>
2858+ if ctx.owner != defn.RootClass // valid top-level "package _root_"
2859+ && ctx.owner != defn.EmptyPackageClass // valid "package _root_" after parser's "package <empty>" wrapper
2860+ then
2861+ checkNonRootName(pid1.name, pid1.span)
28562862 inContext(ctx.packageContext(tree, pkg)) {
28572863 // If it exists, complete the class containing the top-level definitions
28582864 // before typing any statement in the package to avoid cycles as in i13669.scala
0 commit comments