diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index b692774f39f5..02d6f4e81dcb 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -2910,12 +2910,12 @@ object Parsers { /** ContextTypes ::= Type {‘,’ Type} */ - def contextTypes(ofClass: Boolean, nparams: Int): List[ValDef] = + def contextTypes(ofClass: Boolean, nparams: Int, impliedMods: Modifiers): List[ValDef] = val tps = commaSeparated(typ) var counter = nparams def nextIdx = { counter += 1; counter } val paramFlags = if ofClass then Private | Local | ParamAccessor else Param - tps.map(makeSyntheticParameter(nextIdx, _, paramFlags | Synthetic | Given)) + tps.map(makeSyntheticParameter(nextIdx, _, paramFlags | Synthetic | impliedMods.flags)) /** ClsParamClause ::= ‘(’ [‘erased’] ClsParams ‘)’ | UsingClsParamClause * UsingClsParamClause::= ‘(’ ‘using’ [‘erased’] (ClsParams | ContextTypes) ‘)’ @@ -3016,7 +3016,7 @@ object Parsers { || startParamTokens.contains(in.token) || isIdent && (in.name == nme.inline || in.lookahead.isColon()) if isParams then commaSeparated(() => param()) - else contextTypes(ofClass, nparams) + else contextTypes(ofClass, nparams, impliedMods) checkVarArgsRules(clause) clause } diff --git a/tests/pos-custom-args/erased/i11896.scala b/tests/pos-custom-args/erased/i11896.scala new file mode 100644 index 000000000000..49e5307f1a49 --- /dev/null +++ b/tests/pos-custom-args/erased/i11896.scala @@ -0,0 +1,8 @@ +import scala.language.experimental.erasedDefinitions + +type X +erased def x: X = compiletime.erasedValue + +def foo(using erased X): Unit = () + +def test: Unit = foo(using x)