diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index b1058855bbd1..74a8c350bdab 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -1643,6 +1643,10 @@ class Typer extends Namer PrepareInlineable.registerInlineInfo(sym, _ => rhs1) if (sym.isConstructor && !sym.isPrimaryConstructor) { + val ename = sym.erasedName + if (ename != sym.name) + ctx.error(em"@alpha annotation ${'"'}$ename${'"'} may not be used on a constructor", ddef.sourcePos) + for (param <- tparams1 ::: vparamss1.flatten) checkRefsLegal(param, sym.owner, (name, sym) => sym.is(TypeParam), "secondary constructor") diff --git a/tests/neg/7722.check b/tests/neg/7722.check new file mode 100644 index 000000000000..ba61e9fb5ef5 --- /dev/null +++ b/tests/neg/7722.check @@ -0,0 +1,4 @@ +-- Error: tests/neg/7722.scala:2:35 ------------------------------------------------------------------------------------ +2 | @scala.annotation.alpha("E") def this() = this(3) // error + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | @alpha annotation "E" may not be used on a constructor diff --git a/tests/neg/7722.scala b/tests/neg/7722.scala new file mode 100644 index 000000000000..bc309f1926cd --- /dev/null +++ b/tests/neg/7722.scala @@ -0,0 +1,8 @@ +class A(i:Int){ + @scala.annotation.alpha("E") def this() = this(3) // error +} +object O{ + def main(args: Array[String]) = { + new A() + } +}