[IR] Pass substituted type during optimization replacing getter call with field access
#KT-71119
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java
index 6e98754..91bde1c 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java
@@ -54791,6 +54791,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java
index a926361..d3c7818 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java
@@ -54791,6 +54791,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java
index 116c451..603c858 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java
@@ -54402,6 +54402,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java
index 006d0df..d7910e6 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java
@@ -54402,6 +54402,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
index 4f1a12b..8ad471c 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
@@ -132,7 +132,7 @@
expression.getValueArgument(expression.valueArgumentsCount - 1)!!
)
} else {
- +irGetField(receiver.takeUnless { backingField.isStatic }, backingField)
+ +irGetField(receiver.takeUnless { backingField.isStatic }, backingField, expression.type)
}
}.unwrapSingleExpressionBlock()
}
diff --git a/compiler/testData/codegen/box/regressions/kt71119.kt b/compiler/testData/codegen/box/regressions/kt71119.kt
new file mode 100644
index 0000000..56fc653
--- /dev/null
+++ b/compiler/testData/codegen/box/regressions/kt71119.kt
@@ -0,0 +1,66 @@
+class BC<A: Any>(val f: A) {
+ open fun m(): Boolean {
+ val cond: Boolean = BC(2.0).f == 3.0
+ return cond
+ }
+ open fun m1(): Boolean {
+ val cond: Boolean = BC(2.0).f == 2.0
+ return cond
+ }
+ open fun m2(): Boolean {
+ val cond: Boolean = BC(2.0f).f == 3.0f
+ return cond
+ }
+ open fun m3(): Boolean {
+ val cond: Boolean = BC(2.0f).f == 2.0f
+ return cond
+ }
+ open fun m4(): Boolean {
+ val cond: Boolean = BC(2).f == 3
+ return cond
+ }
+ open fun m5(): Boolean {
+ val cond: Boolean = BC(2).f == 2
+ return cond
+ }
+}
+
+class BC1<E: Double, A: Any>(val f: A) {
+ open fun m(p: E): Boolean {
+ val obj = BC1<E, E>(p)
+ val cond = (obj.f == p)
+ return cond
+ }
+}
+
+class BC2<E: Float, A: Any>(val f: A) {
+ open fun m(p: E): Boolean {
+ val obj = BC2<E, E>(p)
+ val cond = (obj.f == p)
+ return cond
+ }
+}
+
+class BC3<E: Int, A: Any>(val f: A) {
+ open fun m(p: E): Boolean {
+ val obj = BC3<E, E>(p)
+ val cond = (obj.f == p)
+ return cond
+ }
+}
+
+fun box(): String {
+ if (BC(Any()).m()) return "NOT_OK1"
+ if (!BC(Any()).m1()) return "NOT_OK2"
+ if (BC(Any()).m2()) return "NOT_OK3"
+ if (!BC(Any()).m3()) return "NOT_OK4"
+ if (BC(Any()).m4()) return "NOT_OK5"
+ if (!BC(Any()).m5()) return "NOT_OK6"
+ if (!BC1<Double, _>(Any()).m(2.0)) return "NOT_OK7"
+ if (!BC2<Float, _>(Any()).m(2.0f)) return "NOT_OK8"
+ if (!BC3<Int, _>(Any()).m(2)) return "NOT_OK9"
+ BC1<Nothing, _>(2.0)
+ BC2<Nothing, _>(2.0f)
+ BC3<Nothing, _>(2)
+ return "OK"
+}
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java
index 3c74cad..27d320e 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java
@@ -53546,6 +53546,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
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 f77d57b..814616f 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
@@ -53546,6 +53546,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java
index 6473594..373bede 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java
@@ -53546,6 +53546,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java
index 9e3ebf3..2bf836b 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java
@@ -53546,6 +53546,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
index 05fbcc0..c8fc413 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
@@ -43222,6 +43222,11 @@
runTest("compiler/testData/codegen/box/regressions/kt68727.kt");
}
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
@TestMetadata("kt715.kt")
public void testKt715() {
runTest("compiler/testData/codegen/box/regressions/kt715.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java
index 72c8774..8ec0bc8 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java
@@ -38874,6 +38874,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java
index a7c468f..38b17bd 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java
@@ -38874,6 +38874,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
index cb9e2ff..229644a 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
@@ -38210,6 +38210,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java
index 208e97d..2e0c2da 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java
@@ -38210,6 +38210,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java
index 3e4f317..1c6b169 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java
@@ -42253,6 +42253,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java
index 29120d3..c3f3cbf 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java
@@ -43303,6 +43303,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java
index 375390a..4005cf0 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java
@@ -40526,6 +40526,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java
index 6224b59..952c515 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java
@@ -41563,6 +41563,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java
index d534060..5a1a058 100644
--- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java
+++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmJsCodegenBoxTestGenerated.java
@@ -38682,6 +38682,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");
diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java
index 1c9474a..cc53d62 100644
--- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java
+++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java
@@ -38018,6 +38018,12 @@
}
@Test
+ @TestMetadata("kt71119.kt")
+ public void testKt71119() {
+ runTest("compiler/testData/codegen/box/regressions/kt71119.kt");
+ }
+
+ @Test
@TestMetadata("kt7401.kt")
public void testKt7401() {
runTest("compiler/testData/codegen/box/regressions/kt7401.kt");