diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index e9f5f48eb24b..ea26550fb597 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -5640,7 +5640,12 @@ object Types { case Range(lo, hi) => range(derivedLambdaType(tp)(formals, lo), derivedLambdaType(tp)(formals, hi)) case _ => - tp.derivedLambdaType(tp.paramNames, formals, restpe) + if formals.exists(isRange) then + range( + derivedLambdaType(tp)(formals.map(upper(_).asInstanceOf[tp.PInfo]), restpe), + derivedLambdaType(tp)(formals.map(lower(_).asInstanceOf[tp.PInfo]), restpe)) + else + tp.derivedLambdaType(tp.paramNames, formals, restpe) } protected def reapply(tp: Type): Type = apply(tp) diff --git a/tests/neg/i12384.scala b/tests/neg/i12384.scala new file mode 100644 index 000000000000..fef2ce018ee3 --- /dev/null +++ b/tests/neg/i12384.scala @@ -0,0 +1,8 @@ +object Nats { + trait Fold { + trait Nat + } + type Inc = Fold { + type Apply[N <: Nat] = Succ // error + } +} \ No newline at end of file