From 903e969598dd80f27d4244d61e01a971db57d38c Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 24 Apr 2023 17:38:51 +0300 Subject: [PATCH] [FIR2IR] Correctly calculate offsets for implicit toLong() calls during constant evaluation ^KT-58132 Fixed --- .../kotlin/fir/backend/ConstValueProviderImpl.kt | 5 +++-- .../codegen/FirLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/box/constants/literalToLongConversion.kt | 8 ++++++++ .../runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../runners/codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../kotlin/codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../blackboxtest/FirNativeCodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../konan/blackboxtest/NativeCodegenBoxTestGenerated.java | 6 ++++++ .../blackboxtest/NativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java | 5 +++++ 17 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/constants/literalToLongConversion.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConstValueProviderImpl.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConstValueProviderImpl.kt index 7fd7adadc3c..23e7c7f8961 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConstValueProviderImpl.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConstValueProviderImpl.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.packageFqName import org.jetbrains.kotlin.fir.serialization.constant.ConstValueProvider +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.name.Name class ConstValueProviderImpl( @@ -28,7 +29,7 @@ class ConstValueProviderImpl( return if (firExpression is FirQualifiedAccessExpression) { // TODO check that this behavior is expected in ConversionUtils and if not fix it val calleeReference = firExpression.calleeReference - val start = calleeReference.source?.startOffsetSkippingComments() ?: calleeReference.source?.startOffset ?: return null + val start = calleeReference.source?.startOffsetSkippingComments() ?: calleeReference.source?.startOffset ?: UNDEFINED_OFFSET val end = firExpression.source?.endOffset ?: return null evaluatedConstTracker.load(start, end, fileName) } else { @@ -37,4 +38,4 @@ class ConstValueProviderImpl( evaluatedConstTracker.load(start, end, fileName) } } -} \ No newline at end of file +} 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 be978a878ef..8569741bbca 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 @@ -8409,6 +8409,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 4b757453b43..aa10980f83e 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 @@ -8409,6 +8409,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/compiler/testData/codegen/box/constants/literalToLongConversion.kt b/compiler/testData/codegen/box/constants/literalToLongConversion.kt new file mode 100644 index 00000000000..b9f9bbcf83e --- /dev/null +++ b/compiler/testData/codegen/box/constants/literalToLongConversion.kt @@ -0,0 +1,8 @@ +// ISSUE: KT-58132 + +const val hourInMilliseconds: Long = 60 * 60 * 1000 + +fun box(): String { + val expected = 3600000L + return if (hourInMilliseconds == expected) "OK" else "Fail: $hourInMilliseconds" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 1be96c45c61..a38ecfcba36 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -8193,6 +8193,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 6f8f4eb94d3..148fd05b059 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 @@ -8409,6 +8409,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 e17c3304fbb..254d0b9a6cd 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 @@ -8409,6 +8409,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 9c8513697e3..04b1e8d008f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -6259,6 +6259,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @TestMetadata("long.kt") public void testLong() throws Exception { runTest("compiler/testData/codegen/box/constants/long.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index 744fc2ded4e..3ea39e2292b 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -5411,6 +5411,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 b25d25b621e..62e9b07af0a 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 @@ -5471,6 +5471,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 132c13d81fb..c10b75b5fa1 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 @@ -5471,6 +5471,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { 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 ab1fda601b8..028e5b7bf73 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 @@ -5471,6 +5471,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index 33050b961c2..af942a55d7d 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -6452,6 +6452,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index 52cbac46483..210f6493c0d 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -6598,6 +6598,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index e662e2ec8e5..1e6c5a0e831 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -6379,6 +6379,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index db1c3df918f..e38146b629c 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -6525,6 +6525,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @Test + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @Test @TestMetadata("long.kt") public void testLong() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java index bc54b157966..3976c953ffe 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java @@ -4819,6 +4819,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/constants/kt9532.kt"); } + @TestMetadata("literalToLongConversion.kt") + public void testLiteralToLongConversion() throws Exception { + runTest("compiler/testData/codegen/box/constants/literalToLongConversion.kt"); + } + @TestMetadata("long.kt") public void testLong() throws Exception { runTest("compiler/testData/codegen/box/constants/long.kt");