diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index c7b462ca6c5f..a537cdeb0f0e 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -914,14 +914,22 @@ object desugar { def badRightAssoc(problem: String) = report.error(i"right-associative extension method $problem", mdef.srcPos) ext.paramss ++ mdef.paramss - params1 match + def noVParam = badRightAssoc("must start with a single parameter") + def checkVparam(params: ParamClause) = params match case ValDefs(vparam :: Nil) => if !vparam.mods.is(Given) then val (leadingUsing, otherExtParamss) = ext.paramss.span(isUsingOrTypeParamClause) leadingUsing ::: params1 :: otherExtParamss ::: paramss1 else badRightAssoc("cannot start with using clause") case _ => - badRightAssoc("must start with a single parameter") + noVParam + params1 match + case TypeDefs(_) => paramss1 match + case params2 :: _ => checkVparam(params2) + case _ => noVParam + case _ => + checkVparam(params1) + case _ => ext.paramss ++ mdef.paramss ).withMods(mdef.mods | ExtensionMethod) diff --git a/tests/pos/i11583.scala b/tests/pos/i11583.scala new file mode 100644 index 000000000000..d3c3dcb84329 --- /dev/null +++ b/tests/pos/i11583.scala @@ -0,0 +1,2 @@ +extension (s: String) + def :*:[T <: Tuple](that: T) : String *: T = ???