Better overload_resolution_ambiguity reporting
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt
index 656a50e..b888a7e 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt
@@ -57,6 +57,7 @@
 import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
 import org.jetbrains.kotlin.fir.visitors.FirTransformer
 import org.jetbrains.kotlin.fir.visitors.transformSingle
+import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.resolve.calls.inference.model.ConeNoInferSubtyping
 import org.jetbrains.kotlin.resolve.calls.inference.model.InferredEmptyIntersection
 import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
@@ -1193,28 +1194,36 @@
         if (arrayLiteral.isResolved) return arrayLiteral
         val expectedArrayType = data?.getExpectedType(arrayLiteral)
         val expectedArrayElementType = expectedArrayType?.let { getCollectionLiteralElementType(it, session, scopeSession) }
-        if (expectedArrayType == null || expectedArrayElementType == null) {
-            println("InferenceError: Collection literal type is unknown. Overload resolution ambiguity?")
-            arrayLiteral.resultType = buildErrorTypeRef { // todo
-                source = arrayLiteral.source
-                diagnostic = ConeSimpleDiagnostic("Collection literal type is unknown", kind = DiagnosticKind.InferenceError)
-            }.coneType
-            return arrayLiteral
-        }
-        val call = components.syntheticCallGenerator.generateCollectionCall(
-            transformElement(arrayLiteral, expectedArrayElementType.toExpectedType()),
-            expectedArrayType,
-            resolutionContext,
-            resolutionMode = ResolutionMode.ContextIndependent
-        )
-        if (!call.isResolved) { // hack: otherwise, intArrayOf resolves to arrayOf for some weird reason
-            components.callResolver.resolveCallAndSelectCandidate(
-                call,
-                ResolutionMode.WithExpectedType(expectedArrayType.toFirResolvedTypeRef())
+        val call: FirFunctionCall
+        val actualArrayType: ConeKotlinType
+        if (expectedArrayType != null && expectedArrayElementType != null) {
+            actualArrayType = expectedArrayType
+            call = components.syntheticCallGenerator.generateCollectionCall(
+                transformElement(arrayLiteral, expectedArrayElementType.toExpectedType()),
+                expectedArrayType,
+                resolutionContext,
+                resolutionMode = ResolutionMode.ContextIndependent
             )
+            if (!call.isResolved) { // hack: otherwise, intArrayOf resolves to arrayOf for some weird reason
+                components.callResolver.resolveCallAndSelectCandidate(
+                    call,
+                    ResolutionMode.WithExpectedType(expectedArrayType.toFirResolvedTypeRef())
+                )
+            }
+        } else {
+            call = components.syntheticCallGenerator.generateCollectionOfCall( // Just a default fallback
+                Name.identifier("listOf"),
+                arrayLiteral,
+                resolutionContext,
+                ResolutionMode.ContextIndependent
+            )
+            components.callCompleter.completeCall(call, ResolutionMode.ContextIndependent)
+            actualArrayType = call.resolvedType
         }
         val result = call.transform<FirExpression, _>(this, data)
-        result.resultType = expectedArrayType
+        result.resultType = actualArrayType
+        // todo for some reason overload_resolution_ambiguity test fails with exception without this line. Do we leak FirArrayLiteral somehow?
+        arrayLiteral.resultType = actualArrayType
         return result
     }