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());
