diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt index ca1175f8aab..9d2bc198c0f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt @@ -80,7 +80,7 @@ object FirInlineClassDeclarationChecker : FirRegularClassChecker() { primaryConstructorParametersByName.map { (_, parameter) -> parameter.symbol }.toSet() } - innerDeclaration.body != null -> { + innerDeclaration.body != null && !context.languageVersionSettings.supportsFeature(LanguageFeature.ValueClassesSecondaryConstructorWithBody) -> { val body = innerDeclaration.body!! reporter.reportOn( body.source, FirErrors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS, context diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt index 07c62378055..9b15c18c48c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt @@ -263,11 +263,13 @@ class ReservedMembersAndConstructsForInlineClass : DeclarationChecker { } is ConstructorDescriptor -> { - val secondaryConstructor = declaration as? KtSecondaryConstructor ?: return - val bodyExpression = secondaryConstructor.bodyExpression - if (secondaryConstructor.hasBlockBody() && bodyExpression is KtBlockExpression) { - val lBrace = bodyExpression.lBrace ?: return - context.trace.report(Errors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS.on(lBrace)) + if (!context.languageVersionSettings.supportsFeature(LanguageFeature.ValueClassesSecondaryConstructorWithBody)) { + val secondaryConstructor = declaration as? KtSecondaryConstructor ?: return + val bodyExpression = secondaryConstructor.bodyExpression + if (secondaryConstructor.hasBlockBody() && bodyExpression is KtBlockExpression) { + val lBrace = bodyExpression.lBrace ?: return + context.trace.report(Errors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS.on(lBrace)) + } } } } diff --git a/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructor.kt b/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructor.kt index ad8a3345305..e391ef56887 100644 --- a/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructor.kt +++ b/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructor.kt @@ -1,10 +1,9 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses +// LANGUAGE: +ValueClasses, +ValueClassesSecondaryConstructorWithBody OPTIONAL_JVM_INLINE_ANNOTATION value class IC private constructor(val i: Int) { - @Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") constructor() : this(0) { counter += 1 } diff --git a/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructorGeneric.kt b/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructorGeneric.kt index 8efb711c2fd..4094e422e45 100644 --- a/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructorGeneric.kt +++ b/compiler/testData/codegen/box/inlineClasses/boxImplDoesNotExecuteInSecondaryConstructorGeneric.kt @@ -1,10 +1,9 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses, +GenericInlineClassParameter +// LANGUAGE: +ValueClasses, +GenericInlineClassParameter, +ValueClassesSecondaryConstructorWithBody OPTIONAL_JVM_INLINE_ANNOTATION value class IC private constructor(val i: T) { - @Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") constructor() : this(0 as T) { counter += 1 } diff --git a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClass.kt index cdcc45d3a5f..62d09241d33 100644 --- a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClass.kt +++ b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClass.kt @@ -1,8 +1,6 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses - -@file:Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") +// LANGUAGE: +ValueClasses, +ValueClassesSecondaryConstructorWithBody var global = "wrong" diff --git a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassGeneric.kt b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassGeneric.kt index e1fcd3b3915..fbaa92e84d5 100644 --- a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassGeneric.kt +++ b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassGeneric.kt @@ -1,8 +1,6 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses, +GenericInlineClassParameter - -@file:Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") +// LANGUAGE: +ValueClasses, +GenericInlineClassParameter, +ValueClassesSecondaryConstructorWithBody var global = "wrong" diff --git a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierType.kt b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierType.kt index a3806cb826e..0175459945e 100644 --- a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierType.kt +++ b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierType.kt @@ -1,6 +1,6 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses +// LANGUAGE: +ValueClasses, +ValueClassesSecondaryConstructorWithBody var global = "wrong" @@ -10,7 +10,6 @@ value class Foo(val x: Int) { constructor(z: Long) : this(z.toInt() + 1) - @Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") constructor(other: Char) : this(other.toInt().toString()) { global = "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierTypeGeneric.kt b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierTypeGeneric.kt index 20a1c063fc1..b4a1784e792 100644 --- a/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierTypeGeneric.kt +++ b/compiler/testData/codegen/box/inlineClasses/secondaryConstructorsInsideInlineClassWithPrimitiveCarrierTypeGeneric.kt @@ -1,6 +1,6 @@ // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses, +GenericInlineClassParameter +// LANGUAGE: +ValueClasses, +GenericInlineClassParameter, +ValueClassesSecondaryConstructorWithBody var global = "wrong" @@ -10,7 +10,6 @@ value class Foo(val x: T) { constructor(z: Long) : this((z.toInt() + 1) as T) - @Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") constructor(other: Char) : this(other.toInt().toString()) { global = "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructor.kt b/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructor.kt index 73f57aea99f..5ee1e8c4843 100644 --- a/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructor.kt +++ b/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructor.kt @@ -4,9 +4,7 @@ // IGNORE_BACKEND: JS_IR_ES6 // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses - -@file:Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") +// LANGUAGE: +ValueClasses, +ValueClassesSecondaryConstructorWithBody OPTIONAL_JVM_INLINE_ANNOTATION value class Foo(val x: String) { diff --git a/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructorGeneric.kt b/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructorGeneric.kt index a216d53a3d6..1001b4449c4 100644 --- a/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructorGeneric.kt +++ b/compiler/testData/codegen/box/inlineClasses/simpleSecondaryConstructorGeneric.kt @@ -4,9 +4,7 @@ // IGNORE_BACKEND: JS_IR_ES6 // WITH_STDLIB // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses, +GenericInlineClassParameter - -@file:Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS") +// LANGUAGE: +ValueClasses, +GenericInlineClassParameter, +ValueClassesSecondaryConstructorWithBody OPTIONAL_JVM_INLINE_ANNOTATION value class Foo(val x: T) { diff --git a/compiler/testData/codegen/box/valueClasses/complex.kt b/compiler/testData/codegen/box/valueClasses/complex.kt index 3aa854b7877..be57af478d4 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.kt +++ b/compiler/testData/codegen/box/valueClasses/complex.kt @@ -6,20 +6,26 @@ // TARGET_BACKEND: JVM_IR // IGNORE_BACKEND: ANDROID, ANDROID_IR // WORKS_WHEN_VALUE_CLASS -// LANGUAGE: +ValueClasses +// LANGUAGE: +ValueClasses, +ValueClassesSecondaryConstructorWithBody @JvmInline value class A(val x: List) @JvmInline -value class B(val x: UInt) +value class B(val x: UInt) { + constructor(x: String) : this(x.toUInt()) { + supply(x) + } +} @JvmInline value class C(val x: Int, val y: B, val z: String = "3") @JvmInline value class D(val x: C) { - constructor(x: Int, y: UInt, z: Int) : this(C(x, B(y), z.toString())) + constructor(x: Int, y: UInt, z: Int) : this(C(x, B(y), z.toString())) { + supply(y) + } init { supply(x.x) @@ -69,6 +75,7 @@ fun > h(r: R) { g(r.z) f(r) r + require(B("3") == B(3U)) C(2, B(3U), "") D(C(2, B(3U), "")) val x = D(C(2, B(3U), "")) @@ -227,6 +234,7 @@ fun box(): String { 1 #3 3 + 4 #4 #5 R(x=1, y=2, z=E(x=D(x=C(x=3, y=B(x=4), z=5))), t=A(x=[[6]])) @@ -257,12 +265,14 @@ fun box(): String { B(x=4) 5 4 + 3 2 2 4 D(x=C(x=4, y=B(x=5), z=1)) 6 6 + 7 6 6 D(x=C(x=6, y=B(x=7), z=2)) diff --git a/compiler/testData/codegen/box/valueClasses/complex.txt b/compiler/testData/codegen/box/valueClasses/complex.txt index 0d7ed9bc934..f8dd2747630 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.txt +++ b/compiler/testData/codegen/box/valueClasses/complex.txt @@ -24,6 +24,7 @@ public final class B { private final field x: int private synthetic method (p0: int): void public synthetic final static method box-impl(p0: int): B + public static method constructor-impl(@org.jetbrains.annotations.NotNull p0: java.lang.String): int public static method constructor-impl(p0: int): int public method equals(p0: java.lang.Object): boolean public static method equals-impl(p0: int, p1: java.lang.Object): boolean diff --git a/compiler/testData/diagnostics/tests/inlineClasses/reservedMembersAndConstructsInsideInlineClass.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/reservedMembersAndConstructsInsideInlineClass.fir.kt index a5f33a45d89..447f6acc5e9 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/reservedMembersAndConstructsInsideInlineClass.fir.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/reservedMembersAndConstructsInsideInlineClass.fir.kt @@ -1,18 +1,21 @@ -// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +CustomEqualsInInlineClasses +// WITH_STDLIB +// !LANGUAGE: +CustomEqualsInValueClasses // !DIAGNOSTICS: -UNUSED_PARAMETER -inline class IC1(val x: Any) { +@JvmInline +value class IC1(val x: Any) { fun box() {} fun box(x: Any) {} fun unbox() {} fun unbox(x: Any) {} - override fun equals(other: Any?): Boolean = true + override fun equals(other: Any?): Boolean = true override fun hashCode(): Int = 0 } -inline class IC2(val x: Any) { +@JvmInline +value class IC2(val x: Any) { fun box(x: Any) {} fun box(): Any = TODO() @@ -23,7 +26,8 @@ inline class IC2(val x: Any) { fun hashCode(a: Any): Int = 0 } -inline class IC3(val x: Any) { +@JvmInline +value class IC3(val x: Any) { fun box(x: Any): Any = TODO() fun unbox(x: Any): Any = TODO() @@ -34,12 +38,34 @@ interface WithBox { fun box(): String } -inline class IC4(val s: String) : WithBox { +@JvmInline +value class IC4(val s: String) : WithBox { override fun box(): String = "" } -inline class IC5(val a: String) { +@JvmInline +value class IC5(val a: String) { constructor(i: Int) : this(i.toString()) { TODO("something") } } + +@JvmInline +value class IC6(val a: String) { + fun equals(other: IC6): Boolean = true +} + +@JvmInline +value class IC7(val a: String) { + fun equals(other: IC7<*>): Boolean = true +} + +@JvmInline +value class IC8(val a: String) { + fun equals(other: IC8): Boolean = true +} + +@JvmInline +value class IC9(val a: String) { + fun equals(other: IC9): Boolean = true +} diff --git a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.fir.kt b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.fir.kt new file mode 100644 index 00000000000..c06de3195d0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.fir.kt @@ -0,0 +1,125 @@ +// !SKIP_JAVAC +// !LANGUAGE: +CustomEqualsInValueClasses, +ValueClasses +// ALLOW_KOTLIN_PACKAGE +// !DIAGNOSTICS: -UNUSED_PARAMETER + +package kotlin.jvm + +annotation class JvmInline + +@JvmInline +value class IC1(val x: Any) { + fun box() {} + fun box(x: Any) {} + + fun unbox() {} + fun unbox(x: Any) {} + + override fun equals(other: Any?): Boolean = true + override fun hashCode(): Int = 0 +} + +@JvmInline +value class IC2(val x: Any) { + fun box(x: Any) {} + fun box(): Any = TODO() + + fun unbox(x: Any) {} + fun unbox(): Any = TODO() + + fun equals(my: Any, other: Any): Boolean = true + fun hashCode(a: Any): Int = 0 +} + +@JvmInline +value class IC3(val x: Any) { + fun box(x: Any): Any = TODO() + fun unbox(x: Any): Any = TODO() + + fun equals(): Boolean = true +} + +interface WithBox { + fun box(): String +} + +@JvmInline +value class IC4(val s: String) : WithBox { + override fun box(): String = "" +} + +@JvmInline +value class IC5(val a: String) { + constructor(i: Int) : this(i.toString()) { + TODO("something") + } +} + +@JvmInline +value class IC6(val a: String) { + fun equals(other: IC6): Boolean = true +} + +@JvmInline +value class MFVC1(val x: Any, val y: Any) { + fun box() {} + fun box(x: Any) {} + + fun unbox() {} + fun unbox(x: Any) {} + + override fun equals(other: Any?): Boolean = true + override fun hashCode(): Int = 0 +} + +@JvmInline +value class MFVC2(val x: Any, val y: Any) { + fun box(x: Any) {} + fun box(): Any = TODO() + + fun unbox(x: Any) {} + fun unbox(): Any = TODO() + + fun equals(my: Any, other: Any): Boolean = true + fun hashCode(a: Any): Int = 0 +} + +@JvmInline +value class MFVC3(val x: Any, val y: Any) { + fun box(x: Any): Any = TODO() + fun unbox(x: Any): Any = TODO() + + fun equals(): Boolean = true +} + +@JvmInline +value class MFVC4(val s: String, val t: String) : WithBox { + override fun box(): String = "" +} + +@JvmInline +value class MFVC5(val a: String, val b: String) { + constructor(i: Int) : this(i.toString(), "6") { + TODO("something") + } +} + +@JvmInline +value class MFVC6(val a: String, val b: String) { + fun equals(other: MFVC6): Boolean = true +} + +@JvmInline +value class MFVC7(val a: String, val b: String) { + fun equals(other: MFVC7<*>): Boolean = true +} + +@JvmInline +value class MFVC8(val a: String, val b: String) { + fun equals(other: MFVC8): Boolean = true +} + +@JvmInline +value class MFVC9(val a: String, val b: String) { + fun equals(other: MFVC9): Boolean = true +} diff --git a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.kt b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.kt new file mode 100644 index 00000000000..e4d2a098df9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.kt @@ -0,0 +1,105 @@ +// !SKIP_JAVAC +// !LANGUAGE: +CustomEqualsInInlineClasses, +ValueClasses +// ALLOW_KOTLIN_PACKAGE +// !DIAGNOSTICS: -UNUSED_PARAMETER + +package kotlin.jvm + +annotation class JvmInline + +@JvmInline +value class IC1(val x: Any) { + fun box() {} + fun box(x: Any) {} + + fun unbox() {} + fun unbox(x: Any) {} + + override fun equals(other: Any?): Boolean = true + override fun hashCode(): Int = 0 +} + +@JvmInline +value class IC2(val x: Any) { + fun box(x: Any) {} + fun box(): Any = TODO() + + fun unbox(x: Any) {} + fun unbox(): Any = TODO() + + fun equals(my: Any, other: Any): Boolean = true + fun hashCode(a: Any): Int = 0 +} + +@JvmInline +value class IC3(val x: Any) { + fun box(x: Any): Any = TODO() + fun unbox(x: Any): Any = TODO() + + fun equals(): Boolean = true +} + +interface WithBox { + fun box(): String +} + +@JvmInline +value class IC4(val s: String) : WithBox { + override fun box(): String = "" +} + +@JvmInline +value class IC5(val a: String) { + constructor(i: Int) : this(i.toString()) { + TODO("something") + } +} + +@JvmInline +value class IC6(val a: String) { + fun equals(other: IC6): Boolean = true +} + +@JvmInline +value class MFVC1(val x: Any, val y: Any) { + fun box() {} + fun box(x: Any) {} + + fun unbox() {} + fun unbox(x: Any) {} + + override fun equals(other: Any?): Boolean = true + override fun hashCode(): Int = 0 +} + +@JvmInline +value class MFVC2(val x: Any, val y: Any) { + fun box(x: Any) {} + fun box(): Any = TODO() + + fun unbox(x: Any) {} + fun unbox(): Any = TODO() + + fun equals(my: Any, other: Any): Boolean = true + fun hashCode(a: Any): Int = 0 +} + +@JvmInline +value class MFVC3(val x: Any, val y: Any) { + fun box(x: Any): Any = TODO() + fun unbox(x: Any): Any = TODO() + + fun equals(): Boolean = true +} + +@JvmInline +value class MFVC4(val s: String, val t: String) : WithBox { + override fun box(): String = "" +} + +@JvmInline +value class MFVC5(val a: String, val b: String) { + constructor(i: Int) : this(i.toString(), "6") { + TODO("something") + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.fir.kt b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.fir.kt index bb3fd24e5c8..e69de29bb2d 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.fir.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.fir.kt @@ -1,56 +0,0 @@ -// !SKIP_JAVAC -// !LANGUAGE: +InlineClasses, +CustomEqualsInInlineClasses -// ALLOW_KOTLIN_PACKAGE -// !DIAGNOSTICS: -UNUSED_PARAMETER - -package kotlin.jvm - -annotation class JvmInline - -@JvmInline -value class IC1(val x: Any) { - fun box() {} - fun box(x: Any) {} - - fun unbox() {} - fun unbox(x: Any) {} - - override fun equals(other: Any?): Boolean = true - override fun hashCode(): Int = 0 -} - -@JvmInline -value class IC2(val x: Any) { - fun box(x: Any) {} - fun box(): Any = TODO() - - fun unbox(x: Any) {} - fun unbox(): Any = TODO() - - fun equals(my: Any, other: Any): Boolean = true - fun hashCode(a: Any): Int = 0 -} - -@JvmInline -value class IC3(val x: Any) { - fun box(x: Any): Any = TODO() - fun unbox(x: Any): Any = TODO() - - fun equals(): Boolean = true -} - -interface WithBox { - fun box(): String -} - -@JvmInline -value class IC4(val s: String) : WithBox { - override fun box(): String = "" -} - -@JvmInline -value class IC5(val a: String) { - constructor(i: Int) : this(i.toString()) { - TODO("something") - } -} diff --git a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.kt b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.kt index 738a040121f..79985c3e777 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !SKIP_JAVAC // !LANGUAGE: +InlineClasses, +CustomEqualsInInlineClasses // ALLOW_KOTLIN_PACKAGE @@ -50,7 +51,7 @@ value class IC4(val s: String) : WithBox { @JvmInline value class IC5(val a: String) { - constructor(i: Int) : this(i.toString()) { + constructor(i: Int) : this(i.toString()) { TODO("something") } } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 1fe137603e8..82bcd8377f5 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -317,6 +317,7 @@ enum class LanguageFeature( JavaSamConversionEqualsHashCode(sinceVersion = null, kind = UNSTABLE_FEATURE), UnitConversionsOnArbitraryExpressions(sinceVersion = null), JsAllowImplementingFunctionInterface(sinceVersion = null, kind = UNSTABLE_FEATURE), + ValueClassesSecondaryConstructorWithBody(sinceVersion = null, kind = UNSTABLE_FEATURE), ; init {