File tree Expand file tree Collapse file tree 4 files changed +34
-7
lines changed
src/dotty/tools/dotc/transform
tests/neg-custom-args/fatal-warnings Expand file tree Collapse file tree 4 files changed +34
-7
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,13 @@ class CheckLoopingImplicits extends MiniPhase:
2020
2121 override def phaseName : String = CheckLoopingImplicits .name
2222
23- override def transformDefDef (mdef : DefDef )(using Context ): DefDef =
23+ override def transformValDef (mdef : ValDef )(using Context ): Tree =
24+ transform(mdef)
25+
26+ override def transformDefDef (mdef : DefDef )(using Context ): Tree =
27+ transform(mdef)
28+
29+ def transform (mdef : ValOrDefDef )(using Context ): Tree =
2430 val sym = mdef.symbol
2531
2632 def checkNotSelfRef (t : RefTree ) =
@@ -70,12 +76,12 @@ class CheckLoopingImplicits extends MiniPhase:
7076 checkNotLooping(finalizer)
7177 case SeqLiteral (elems, _) =>
7278 elems.foreach(checkNotLooping)
73- case t : ValDef =>
74- if ! t.symbol.is( Lazy ) then checkNotLooping(t.rhs)
79+ case t : ValDef =>
80+ checkNotLooping(t.rhs)
7581 case _ =>
7682
77- if sym.isOneOf(GivenOrImplicit ) then
83+ if sym.isOneOf(GivenOrImplicit | Lazy ) then
7884 checkNotLooping(mdef.rhs)
7985 mdef
80- end transformDefDef
86+ end transform
8187end CheckLoopingImplicits
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ scala> type Channel = "A" | "B"
33
44scala> type SelChannel[C <: Tuple] = C match { case x *: xs => x | SelChannel[xs] case _ => Nothing }
55
6- scala> lazy val a: SelChannel[("A", "B", "C")] = a
6+ scala> lazy val a: SelChannel[("A", "B", "C")] = "A"
77lazy val a: "A" | ("B" | ("C" | Nothing))
88
99scala>:type a
Original file line number Diff line number Diff line change 1+ class i13011 {
2+ lazy implicit val simple1 : String = simple1 // error
3+ def f : Unit = {
4+ lazy val simple2 : String = simple2 // error
5+ }
6+
7+ lazy val simple3 : String = if true then this .simple3 else " a" // error
8+
9+ def firstDigitIsEven (n : Int ): Boolean = if n % 10 == n then n % 2 == 0 else firstDigitIsEven(n / 10 )
10+
11+ lazy val simple4 : String = if firstDigitIsEven(22 ) then this .simple4 else " a" // ok
12+
13+ lazy val simple5 : String = identity(this .simple5) // error
14+
15+ lazy val simple6 : String = { // error
16+ this .simple6
17+ " aa"
18+ }
19+
20+ lazy val simple7 : Function0 [Any ] = () => this .simple7 // Ok
21+ }
Original file line number Diff line number Diff line change @@ -40,7 +40,7 @@ val x5 =
4040
4141val x6 =
4242 implicit def barToFoo4 (bar : Bar ): Foo =
43- lazy val y = bar.toFoo // OK
43+ lazy val y = bar.toFoo // error
4444 if false then y else ???
4545 val foo : Foo = Bar (1 )
4646
You can’t perform that action at this time.
0 commit comments