First steps
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt
index b68a5ad..cb3cecb 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt
@@ -65,8 +65,7 @@
         val nullableNothingType = context.session.builtinTypes.nullableNothingType.coneType
         for (varargParameter in varargParameters) {
             val varargParameterType = varargParameter.returnTypeRef.coneType.arrayElementType() ?: continue
-            if (AbstractTypeChecker.isSubtypeOf(context.session.typeContext, varargParameterType, nullableNothingType) ||
-                (varargParameterType.isInlineClass(context.session) && !varargParameterType.isUnsignedTypeOrNullableUnsignedType)
+            if (AbstractTypeChecker.isSubtypeOf(context.session.typeContext, varargParameterType, nullableNothingType)
             // Note: comparing with FE1.0, we skip checking if the type is not primitive because primitive types are not inline. That
             // is any primitive values are already allowed by the inline check.
             ) {
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
index bc0922b..112b921 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
@@ -21762,6 +21762,12 @@
         }
 
         @Test
+        @TestMetadata("inlineVarargParam.kt")
+        public void testInlineVarargParam() throws Exception {
+            runTest("compiler/testData/codegen/box/inlineClasses/inlineVarargParam.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+        }
+
+        @Test
         @TestMetadata("iterateOverArrayOfInlineClassValues.kt")
         public void testIterateOverArrayOfInlineClassValues() throws Exception {
             runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt
index 9b5c6ae..528d673 100644
--- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt
+++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.fir.types
 
+import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.StandardClassIds
 
 val ConeKotlinType.isArrayOrPrimitiveArray: Boolean
@@ -24,6 +25,9 @@
             if (primitiveArrayId != null) {
                 return primitiveArrayId.constructClassLikeType(emptyArray(), nullable)
             }
+            if (classId.asString().contains("IC")) {
+                return classId.createNestedClassId(Name.identifier("Array")).constructClassLikeType(emptyArray(), nullable)
+            }
         }
     }
 
diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
index c83b0d3..5d585b7 100644
--- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
+++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
@@ -25,19 +25,19 @@
 import org.jetbrains.kotlin.fir.expressions.builder.*
 import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
 import org.jetbrains.kotlin.fir.references.builder.*
+import org.jetbrains.kotlin.fir.resolve.constructType
 import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
 import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
 import org.jetbrains.kotlin.fir.symbols.impl.*
 import org.jetbrains.kotlin.fir.types.*
 import org.jetbrains.kotlin.fir.types.builder.*
-import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
-import org.jetbrains.kotlin.fir.types.impl.FirQualifierPartImpl
-import org.jetbrains.kotlin.fir.types.impl.FirTypeArgumentListImpl
+import org.jetbrains.kotlin.fir.types.impl.*
 import org.jetbrains.kotlin.lexer.KtTokens.*
 import org.jetbrains.kotlin.name.CallableId
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.SpecialNames
 import org.jetbrains.kotlin.psi.*
+import org.jetbrains.kotlin.psi.addRemoveModifier.addModifier
 import org.jetbrains.kotlin.psi.psiUtil.*
 import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
 import org.jetbrains.kotlin.types.Variance
@@ -206,7 +206,8 @@
             defaultTypeRef: FirTypeRef? = null,
             valueParameterDeclaration: ValueParameterDeclaration,
             additionalAnnotations: List<FirAnnotation> = emptyList()
-        ): FirValueParameter = valueParameter.toFirValueParameter(defaultTypeRef, functionSymbol, valueParameterDeclaration, additionalAnnotations)
+        ): FirValueParameter =
+            valueParameter.toFirValueParameter(defaultTypeRef, functionSymbol, valueParameterDeclaration, additionalAnnotations)
 
         private fun KtTypeReference?.toFirOrImplicitType(): FirTypeRef =
             convertSafe() ?: buildImplicitTypeRef {
@@ -1208,6 +1209,44 @@
                             ).generate()
                         }
 
+                        if (classOrObject.hasModifier(VALUE_KEYWORD)) {
+                            val arrayClassId = context.currentClassId.createNestedClassId(Name.identifier("Array"))
+                            addDeclaration(buildRegularClass {
+                                name = arrayClassId.shortClassName
+                                origin = FirDeclarationOrigin.Synthetic
+                                symbol = FirRegularClassSymbol(arrayClassId)
+                                scopeProvider = baseScopeProvider
+                                this.classKind = ClassKind.CLASS
+                                moduleData = baseModuleData
+                                this.status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL)
+                                addDeclaration(buildSimpleFunction {
+                                    val functionName = Name.identifier("get")
+                                    name = functionName
+                                    origin = FirDeclarationOrigin.Synthetic
+                                    symbol = FirNamedFunctionSymbol(CallableId(arrayClassId, functionName))
+                                    this.status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL).apply { isOperator = true }
+                                    moduleData = baseModuleData
+                                    valueParameters.add(buildValueParameter {
+                                        containingFunctionSymbol = this@buildSimpleFunction.symbol
+                                        origin = FirDeclarationOrigin.Synthetic
+                                        name = Name.identifier("index")
+                                        symbol = FirValueParameterSymbol(name)
+                                        isCrossinline = false
+                                        isNoinline = false
+                                        isVararg = false
+                                        moduleData = baseModuleData
+                                        returnTypeRef = FirImplicitIntTypeRef(source = null)
+                                    })
+                                    val inlineClassType =
+                                        FirRegularClassSymbol(context.currentClassId).constructType(emptyArray(), isNullable = false)
+                                    returnTypeRef = buildResolvedTypeRef { this.type = inlineClassType }
+                                    dispatchReceiverType =
+                                        FirRegularClassSymbol(arrayClassId).constructType(emptyArray(), isNullable = false)
+                                    body = buildEmptyExpressionBlock()
+                                })
+                            })
+                        }
+
                         if (classOrObject.hasModifier(ENUM_KEYWORD)) {
                             generateValuesFunction(
                                 baseModuleData,
@@ -1593,7 +1632,7 @@
         }
 
         private fun KtDeclarationWithInitializer.toInitializerExpression() =
-            runIf (hasInitializer()) {
+            runIf(hasInitializer()) {
                 buildOrLazyExpression(initializer?.toFirSourceElement()) {
                     initializer.toFirExpression("Should have initializer")
                 }
diff --git a/compiler/testData/codegen/box/inlineClasses/inlineVarargParam.kt b/compiler/testData/codegen/box/inlineClasses/inlineVarargParam.kt
new file mode 100644
index 0000000..ca76ff3
--- /dev/null
+++ b/compiler/testData/codegen/box/inlineClasses/inlineVarargParam.kt
@@ -0,0 +1,13 @@
+// WITH_STDLIB
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses, +CustomEqualsInInlineClasses
+// TARGET_BACKEND: JVM_IR
+
+@JvmInline
+value class IC(val x: Int)
+
+fun foo(vararg x: IC) = x[0].x
+
+fun box(): String {
+    return "OK"
+}
\ No newline at end of file
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
index 84dd63a..1e1fe32 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
@@ -21762,6 +21762,12 @@
         }
 
         @Test
+        @TestMetadata("inlineVarargParam.kt")
+        public void testInlineVarargParam() throws Exception {
+            runTest("compiler/testData/codegen/box/inlineClasses/inlineVarargParam.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+        }
+
+        @Test
         @TestMetadata("iterateOverArrayOfInlineClassValues.kt")
         public void testIterateOverArrayOfInlineClassValues() throws Exception {
             runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());