diff --git a/frontend/lib/resolution/resolution-queries.cpp b/frontend/lib/resolution/resolution-queries.cpp index 4f91e13560a6..b77439e288f6 100644 --- a/frontend/lib/resolution/resolution-queries.cpp +++ b/frontend/lib/resolution/resolution-queries.cpp @@ -4033,7 +4033,8 @@ static bool resolveFnCallSpecial(Context* context, exprTypeOut = QualifiedType::makeParamString(context, oss.str()); return true; } else if (srcTy->isClassType() && dstTy->isClassType()) { - // cast (borrowed class) : unmanaged + // cast (borrowed class) : unmanaged, + // and (unmanaged class) : borrowed auto srcClass = srcTy->toClassType(); auto dstClass = dstTy->toClassType(); bool isValidDst = dstClass->manageableType()->isAnyClassType() && diff --git a/frontend/lib/resolution/return-type-inference.cpp b/frontend/lib/resolution/return-type-inference.cpp index 3592ddb46cd6..335b9436ea5d 100644 --- a/frontend/lib/resolution/return-type-inference.cpp +++ b/frontend/lib/resolution/return-type-inference.cpp @@ -1304,7 +1304,10 @@ static bool helpComputeReturnType(ResolutionContext* rc, result = QualifiedType(QualifiedType::CONST_VAR, VoidType::get(context)); return true; } else { - result = QualifiedType(QualifiedType::CONST_VAR, ErroneousType::get(context)); + // TODO: This is a workaround for a bug where the return type was + // not found for some reason. By returning a type we prevent an attempt + // to resolve the non-existent function body. + result = QualifiedType(QualifiedType::CONST_VAR, UnknownType::get(context)); return true; } } else if (fnAstReturnsNonVoid(context, ast->id()) == false) {