Skip to content

Commit 9f06976

Browse files
authored
Merge pull request #13749 from gagandeepkalra/master
2 parents 29f0374 + 0492367 commit 9f06976

File tree

4 files changed

+34
-7
lines changed

4 files changed

+34
-7
lines changed

compiler/src/dotty/tools/dotc/transform/CheckLoopingImplicits.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff 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
8187
end CheckLoopingImplicits

compiler/test-resources/repl/10886

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ scala> type Channel = "A" | "B"
33

44
scala> 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"
77
lazy val a: "A" | ("B" | ("C" | Nothing))
88

99
scala>:type a
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
}

tests/neg-custom-args/fatal-warnings/i13542.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ val x5 =
4040

4141
val 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

0 commit comments

Comments
 (0)