Skip to content

Commit 3aebcac

Browse files
author
EnzeXing
committed
Fixing bug and adding testcases
1 parent 44c1e3a commit 3aebcac

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

compiler/src/dotty/tools/dotc/transform/init/Objects.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ class Objects(using Context @constructorOnly):
865865
Bottom
866866

867867
case Bottom =>
868-
if field.isStaticObject then ObjectRef(field.moduleClass.asClass)
868+
if field.isStaticObject then accessObject(field.moduleClass.asClass)
869869
else Bottom
870870

871871
case ValueSet(values) =>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package cyclicObject
2+
3+
object O1 { // warn
4+
val o = cyclicObject.O2
5+
}
6+
7+
object O2 {
8+
val o = cyclicObject.O1
9+
}

tests/init-global/warn/deadlock.scala

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// example of cyclic initialization causing deadlock
2+
3+
package pkg
4+
5+
object Main extends App {
6+
val createPredef = new Runnable { def run = { val _ = Predef } }
7+
val createSeq = new Runnable { def run = { val _ = Seq } }
8+
new Thread(createPredef).start()
9+
new Thread(createSeq).start()
10+
Thread.sleep(100)
11+
val seq = Predef.seq
12+
val predef = Seq.predef
13+
println("done")
14+
}
15+
16+
object Predef { // warn
17+
Thread.sleep(10)
18+
val seq = Seq
19+
println("done Predef")
20+
}
21+
22+
object Seq {
23+
Thread.sleep(10)
24+
val predef = Predef
25+
println("done Seq")
26+
}

0 commit comments

Comments
 (0)