File tree Expand file tree Collapse file tree 5 files changed +55
-5
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 5 files changed +55
-5
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ object Printers {
77 }
88
99 object noPrinter extends Printer {
10- inline override def println (inline msg : => String ): Unit = ()
10+ inline override def println (msg : => String ): Unit = ()
1111 }
1212
1313 val default = new Printer
Original file line number Diff line number Diff line change @@ -451,7 +451,8 @@ object Checking {
451451 || sym.is(TermParam ) && ! sym.owner.isInlineMethod
452452 ))
453453 fail(ParamsNoInline (sym.owner))
454-
454+ if sym.isInlineMethod && ! sym.is(Deferred ) && sym.allOverriddenSymbols.nonEmpty then
455+ checkInlineOverrideParameters(sym)
455456 if (sym.isOneOf(GivenOrImplicit )) {
456457 if (sym.owner.is(Package ))
457458 fail(TopLevelCantBeImplicit (sym))
@@ -646,6 +647,20 @@ object Checking {
646647 val enumCls = enumCase.owner.linkedClass
647648 if ! cls.info.parents.exists(_.typeSymbol == enumCls) then
648649 ctx.error(i " enum case does not extend its enum $enumCls" , enumCase.sourcePos)
650+
651+ /** Check the inline override methods only use inline parameters if they override an inline parameter. */
652+ def checkInlineOverrideParameters (sym : Symbol )(using Context ): Unit =
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)
663+
649664}
650665
651666trait Checking {
Original file line number Diff line number Diff line change 1+
2+
3+ abstract class Logger {
4+ def log1 (msg : String ): Unit
5+ inline def log2 (msg : String ): Unit
6+ inline def log3 (inline msg : String ): Unit
7+ }
8+
9+ class Logger1 extends Logger {
10+ inline def log1 (msg : String ): Unit = ()
11+ inline def log2 (msg : String ): Unit = ()
12+ inline def log3 (msg : String ): Unit = () // error: Cannot override inline parameter with a non-inline parameter
13+ }
14+
15+ class Logger2 extends Logger {
16+ inline def log1 (inline msg : String ): Unit = () // error: Cannot override non-inline parameter with an inline parameter
17+ inline def log2 (inline msg : String ): Unit = () // error: Cannot override non-inline parameter with an inline parameter
18+ inline def log3 (inline msg : String ): Unit = ()
19+ }
20+
21+ trait A {
22+ inline def f (inline a : Int ): Int
23+ }
24+
25+ trait B {
26+ def f (a : Int ): Int
27+ }
28+
29+ class C extends A , B {
30+ inline def f (inline a : Int ): Int = 3 // error: Cannot override non-inline parameter with and inline parameter
31+ }
32+
33+ class D extends B , A {
34+ inline def f (inline a : Int ): Int = 3 // error: Cannot override non-inline parameter with and inline parameter
35+ }
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ trait Num[T] {
44
55object Num {
66 class IntNum extends Num [Int ] {
7- inline def plus (inline x : Int , inline y : Int ): Int = x + y
7+ inline def plus (x : Int , y : Int ): Int = x + y
88 }
99 given IntNum
1010
Original file line number Diff line number Diff line change @@ -26,7 +26,7 @@ object TypeLevel {
2626
2727 abstract class GenericSum [S ] extends Generic [S ] {
2828 def ordinal (x : S ): Int
29- inline def alternative (n : Int ): GenericProduct [_ <: S ]
29+ inline def alternative (inline n : Int ): GenericProduct [_ <: S ]
3030 }
3131
3232 abstract class GenericProduct [P ] extends Generic [P ] {
@@ -49,7 +49,7 @@ object Lst {
4949 case x : Cons [_] => 0
5050 case Nil => 1
5151 }
52- inline override def alternative (inline n : Int ) <: GenericProduct [_ <: Lst [T ]] =
52+ inline def alternative (inline n : Int ) <: GenericProduct [_ <: Lst [T ]] =
5353 inline n match {
5454 case 0 => Cons .GenericCons [T ]
5555 case 1 => Nil .GenericNil
You can’t perform that action at this time.
0 commit comments