Skip to content

Commit e9c1e7e

Browse files
committed
Disallow non-inline parametter to override inline parameter
1 parent b5a968e commit e9c1e7e

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -650,14 +650,16 @@ object Checking {
650650

651651
/** Check the inline override methods only use inline parameters if they override an inline parameter. */
652652
def checkInlineOverrideParameters(sym: Symbol)(using Context): Unit =
653-
val params = sym.paramSymss.flatten
654-
if params.exists(_.is(Inline)) then
655-
for
656-
sym2 <- sym.allOverriddenSymbols
657-
(p1, p2) <- params.lazyZip(sym2.paramSymss.flatten)
658-
if p1.is(Inline) && !p2.is(Inline)
659-
do
660-
ctx.error("Cannot override non-inline parameter with an inline parameter", p1.sourcePos)
653+
lazy val params = sym.paramSymss.flatten
654+
for
655+
sym2 <- sym.allOverriddenSymbols
656+
(p1, p2) <- sym.paramSymss.flatten.lazyZip(sym2.paramSymss.flatten)
657+
if p1.is(Inline) != p2.is(Inline)
658+
do
659+
ctx.error(
660+
if p2.is(Inline) then "Cannot override inline parameter with a non-inline parameter"
661+
else "Cannot override non-inline parameter with an inline parameter",
662+
p1.sourcePos)
661663

662664
}
663665

tests/neg/inline-parameter-override.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ abstract class Logger {
99
class Logger1 extends Logger {
1010
inline def log1(msg: String): Unit = ()
1111
inline def log2(msg: String): Unit = ()
12-
inline def log3(msg: String): Unit = ()
12+
inline def log3(msg: String): Unit = () // error: Cannot override inline parameter with a non-inline parameter
1313
}
1414

1515
class Logger2 extends Logger {

0 commit comments

Comments
 (0)