diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
index 406adfe..73e13790 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
@@ -241,27 +241,6 @@
     override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
         val function = expression.symbol.owner
 
-        if (function.isIntrinsicInlineClassCreator) {
-            expression.transformChildrenVoid()
-            val inlineClass = expression.getTypeArgument(0)!!.getClass()!!
-            val constructorBridge = replacements.getReplacementFunction(inlineClass.primaryConstructor!!)!!
-            val boxFunction = context.inlineClassReplacements.getBoxFunction(inlineClass, withDefaultSuffix = true)
-            return context.createIrBuilder(expression.symbol, expression.startOffset, expression.endOffset).run {
-                irCall(boxFunction).apply {
-                    putValueArgument(
-                        0,
-                        coerceInlineClasses(
-                            irCall(constructorBridge).apply {
-                                putValueArgument(0, expression.getValueArgument(0))
-                            },
-                            constructorBridge.returnType,
-                            boxFunction.valueParameters[0].type
-                        )
-                    )
-                }
-            }
-        }
-
         val replacement = context.inlineClassReplacements.getReplacementFunction(function)
             ?: return super.visitFunctionAccess(expression)
 
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
index 58750e4..470a8fe 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
@@ -1315,10 +1315,4 @@
         return name == OperatorNameConventions.EQUALS && returnType.isBoolean() && valueParameters.size == 1
                 && (valueParameters[0].type.classFqName?.run { parentClass.hasEqualFqName(this) } ?: false)
                 && contextReceiverParametersCount == 0 && extensionReceiverParameter == null && parentClass.isValue
-    }
-
-val IrFunction.isIntrinsicInlineClassCreator: Boolean
-    get() = (parent as? IrPackageFragment)?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME
-            && name == StandardNames.INTRINSIC_DEFAULT_BOXING_NAME
-            && contextReceiverParametersCount == 0 && extensionReceiverParameter == null
-            && valueParameters.size == 1 && valueParameters[0].type.isNullableAny()
+    }
\ No newline at end of file
diff --git a/core/builtins/native/kotlin/Library.kt b/core/builtins/native/kotlin/Library.kt
index 5229b00..fe279a1 100644
--- a/core/builtins/native/kotlin/Library.kt
+++ b/core/builtins/native/kotlin/Library.kt
@@ -31,11 +31,6 @@
 public operator fun String?.plus(other: Any?): String
 
 /**
- * Returns a default-boxed inline class instance
- */
-public inline fun <reified @PureReifiable T> boxByDefault(value: Any?): T
-
-/**
  * Returns an array of objects of the given type with the given [size], initialized with null values.
  */
 public fun <reified @PureReifiable T> arrayOfNulls(size: Int): Array<T?>
