From c714ae5127f7900973128f7c43e5bab08ab5c24b Mon Sep 17 00:00:00 2001 From: willerf Date: Mon, 29 Apr 2024 06:17:01 -0700 Subject: [PATCH] special case for next field of colon colon in global init checker --- compiler/src/dotty/tools/dotc/transform/init/Objects.scala | 3 ++- tests/init-global/pos/list-colon-colon-next.scala | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 tests/init-global/pos/list-colon-colon-next.scala diff --git a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala index 793d4b41b174..7b5932fe78a5 100644 --- a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala +++ b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala @@ -812,7 +812,8 @@ class Objects(using Context @constructorOnly): else Bottom else if target.exists then - if target.isOneOf(Flags.Mutable) then + def isNextFieldOfColonColon: Boolean = ref.klass == defn.ConsClass && target.name.toString == "next" + if target.isOneOf(Flags.Mutable) && !isNextFieldOfColonColon then if ref.hasVar(target) then val addr = ref.varAddr(target) if addr.owner == State.currentObject then diff --git a/tests/init-global/pos/list-colon-colon-next.scala b/tests/init-global/pos/list-colon-colon-next.scala new file mode 100644 index 000000000000..5a87cb311bea --- /dev/null +++ b/tests/init-global/pos/list-colon-colon-next.scala @@ -0,0 +1,5 @@ +object A: + val a: List[Int] = List(1, 2, 3) + +object B: + val b = A.a.size