@@ -18,7 +18,7 @@ import Names.{Name, TermName}
1818import NameKinds .{InlineAccessorName , InlineBinderName , InlineScrutineeName }
1919import ProtoTypes .selectionProto
2020import SymDenotations .SymDenotation
21- import Inferencing .fullyDefinedType
21+ import Inferencing .isFullyDefined
2222import config .Printers .inlining
2323import ErrorReporting .errorTree
2424import dotty .tools .dotc .tastyreflect .ReflectionImpl
@@ -239,8 +239,10 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(implicit ctx: Context) {
239239
240240 inlining.println(i " ----------------------- \n Inlining $call\n With RHS $rhsToInline" )
241241
242- // Make sure all type arguments to the call are fully determined
243- for (targ <- callTypeArgs) fullyDefinedType(targ.tpe, " inlined type argument" , targ.span)
242+ // Make sure all type arguments to the call are fully determined,
243+ // but continue if that's not achievable (or else i7459.scala would crash).
244+ for arg <- callTypeArgs do
245+ isFullyDefined(arg.tpe, ForceDegree .all)
244246
245247 /** A map from parameter names of the inlineable method to references of the actual arguments.
246248 * For a type argument this is the full argument type.
@@ -313,9 +315,9 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(implicit ctx: Context) {
313315
314316 /** Populate `paramBinding` and `bindingsBuf` by matching parameters with
315317 * corresponding arguments. `bindingbuf` will be further extended later by
316- * proxies to this-references.
318+ * proxies to this-references. Issue an error if some arguments are missing.
317319 */
318- private def computeParamBindings (tp : Type , targs : List [Tree ], argss : List [List [Tree ]]): Unit = tp match {
320+ private def computeParamBindings (tp : Type , targs : List [Tree ], argss : List [List [Tree ]]): Boolean = tp match
319321 case tp : PolyType =>
320322 tp.paramNames.lazyZip(targs).foreach { (name, arg) =>
321323 paramSpan(name) = arg.span
@@ -324,8 +326,8 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(implicit ctx: Context) {
324326 computeParamBindings(tp.resultType, Nil , argss)
325327 case tp : MethodType =>
326328 if argss.isEmpty then
327- // can happen if arguments have errors, see i7438.scala
328329 ctx.error(i " mising arguments for inline method $inlinedMethod" , call.sourcePos)
330+ false
329331 else
330332 tp.paramNames.lazyZip(tp.paramInfos).lazyZip(argss.head).foreach { (name, paramtp, arg) =>
331333 paramSpan(name) = arg.span
@@ -338,7 +340,7 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(implicit ctx: Context) {
338340 case _ =>
339341 assert(targs.isEmpty)
340342 assert(argss.isEmpty)
341- }
343+ true
342344
343345 // Compute val-definitions for all this-proxies and append them to `bindingsBuf`
344346 private def computeThisBindings () = {
@@ -447,7 +449,8 @@ class Inliner(call: tpd.Tree, rhsToInline: tpd.Tree)(implicit ctx: Context) {
447449 }
448450
449451 // Compute bindings for all parameters, appending them to bindingsBuf
450- computeParamBindings(inlinedMethod.info, callTypeArgs, callValueArgss)
452+ if ! computeParamBindings(inlinedMethod.info, callTypeArgs, callValueArgss) then
453+ return call
451454
452455 // make sure prefix is executed if it is impure
453456 if (! isIdempotentExpr(inlineCallPrefix)) registerType(inlinedMethod.owner.thisType)
0 commit comments