Skip to content

Commit 8dfac82

Browse files
committed
Disallow erased def
1 parent 8f0d12b commit 8dfac82

31 files changed

+65
-75
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -607,10 +607,12 @@ object Checking {
607607
fail(ModifierNotAllowedForDefinition(Flags.Infix, s"A top-level ${sym.showKind} cannot be infix."))
608608
if sym.isUpdateMethod && !sym.owner.derivesFrom(defn.Caps_Mutable) then
609609
fail(em"Update methods can only be used as members of classes extending the `Mutable` trait")
610-
checkApplicable(Erased,
611-
!sym.is(Lazy, butNot = Given)
612-
&& !sym.isMutableVarOrAccessor
613-
&& (!sym.isType || sym.isClass))
610+
val unerasable =
611+
sym.is(Lazy, butNot = Given)
612+
|| sym.is(Method, butNot = Macro)
613+
|| sym.is(Mutable)
614+
|| sym.isType && !sym.isClass
615+
checkApplicable(Erased, !unerasable)
614616
checkCombination(Final, Open)
615617
checkCombination(Sealed, Open)
616618
checkCombination(Final, Sealed)
File renamed without changes.
File renamed without changes.
File renamed without changes.

tests/neg/erased-args-lifted.scala renamed to tests/invalid/neg/erased-args-lifted.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
object Test {
44
def foo(a: Int)(b: Int, c: Int) = 42
5-
erased def bar(erased i: Int): Int = {
5+
inline def bar(erased i: Int): Int = {
66
println(1)
77
42
88
}
File renamed without changes.

tests/pos/i11743.scala renamed to tests/invalid/pos/i11743.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import language.experimental.erasedDefinitions
22
import scala.compiletime.erasedValue
33
type UnivEq[A]
44
object UnivEq:
5-
erased def force[A]: UnivEq[A] = erasedValue
5+
inline def force[A]: UnivEq[A] = erasedValue
66
extension [A](erased proof: UnivEq[A])
77
inline def univEq(a: A, b: A): Boolean =
88
a == b
File renamed without changes.

tests/neg/erased-6.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//> using options -language:experimental.erasedDefinitions
22

33
object Test {
4-
erased def foo: Foo = new Foo
4+
erased val foo: Foo = new Foo
55
foo.x() // error
66
foo.y // error
77
foo.z // error

0 commit comments

Comments
 (0)