Skip to content

Commit 13d5fab

Browse files
committed
fix #1648: don't define companion object for java.lang.Object
1 parent 156a9d9 commit 13d5fab

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/dotty/tools/dotc/core/SymbolLoaders.scala

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,27 @@ class SymbolLoaders {
8686
(module, modcls) => new PackageLoader(module, pkg)).entered
8787
}
8888

89+
/** Whether the class to be loaded is `java.lang.Object`
90+
*
91+
* `java.lang.Object` should never be loaded from classfiles
92+
*/
93+
def isObjectClass(owner: Symbol, name: PreName)(implicit ctx: Context): Boolean =
94+
owner.fullName.toString == "java.lang" && name.show == "Object"
95+
8996
/** Enter class and module with given `name` into scope of `owner`
9097
* and give them `completer` as type.
9198
*/
9299
def enterClassAndModule(
93100
owner: Symbol, name: PreName, completer: SymbolLoader,
94101
flags: FlagSet = EmptyFlags, scope: Scope = EmptyScope)(implicit ctx: Context): Unit = {
95102
val clazz = enterClass(owner, name, completer, flags, scope)
96-
val module = enterModule(
97-
owner, name, completer,
98-
modFlags = flags.toTermFlags & RetainedModuleValFlags,
99-
clsFlags = flags.toTypeFlags & RetainedModuleClassFlags,
100-
scope = scope)
103+
104+
if (!isObjectClass(owner, name))
105+
enterModule(
106+
owner, name, completer,
107+
modFlags = flags.toTermFlags & RetainedModuleValFlags,
108+
clsFlags = flags.toTypeFlags & RetainedModuleClassFlags,
109+
scope = scope)
101110
}
102111

103112
/** In batch mode: Enter class and module with given `name` into scope of `owner`

tests/neg/i1648.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class Foo { Object[A] } // error error

0 commit comments

Comments
 (0)