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 953ccfd62cf..b2bc0eb5bf4 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 @@ -28333,6 +28333,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @Test + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @Test @TestMetadata("kt57313.kt") public void testKt57313() 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 fc73df212e7..f16e1600e89 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 @@ -28333,6 +28333,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @Test + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @Test @TestMetadata("kt57313.kt") public void testKt57313() throws Exception { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt index 40df275f562..82b787546e1 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt @@ -51,7 +51,10 @@ enum class EvaluationMode(protected val mustCheckBody: Boolean) { ONLY_BUILTINS(mustCheckBody = false) { private val forbiddenMethodsOnPrimitives = setOf("inc", "dec", "rangeTo", "rangeUntil", "hashCode") - private val forbiddenMethodsOnStrings = setOf("subSequence", "hashCode", "") + private val forbiddenMethodsOnStrings = setOf( + "subSequence", "hashCode", "", + "chars", "codePoints" // from java.lang.CharSequence; they are represented as member declarations from "kotlin.String" + ) private val allowedExtensionFunctions = setOf( "kotlin.floorDiv", "kotlin.mod", "kotlin.NumbersKt.floorDiv", "kotlin.NumbersKt.mod", "kotlin." ) @@ -65,6 +68,9 @@ enum class EvaluationMode(protected val mustCheckBody: Boolean) { override fun canEvaluateFunction(function: IrFunction, context: IrCall?): Boolean { if (function.property?.isConst == true) return true + val returnType = function.returnType + if (!returnType.isPrimitiveType() && !returnType.isString() && !returnType.isUnsignedType()) return false + val fqName = function.fqNameWhenAvailable?.asString() val parent = function.parentClassOrNull val parentType = parent?.defaultType diff --git a/compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt b/compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt new file mode 100644 index 00000000000..a47a21938b4 --- /dev/null +++ b/compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt @@ -0,0 +1,14 @@ +// TARGET_BACKEND: JVM +// WITH_STDLIB +// FULL_JDK + +// java.lang.NoSuchMethodError: java.lang.String.chars +// IGNORE_BACKEND: ANDROID +import kotlin.streams.toList + +fun box(): String { + val shoulNotBeEveluated1 = "HelloWorld".chars() + val shoulNotBeEveluated2 = "HelloWorld".codePoints() + val shoulNotBeEveluated3 = "HelloWorld".chars().toList().groupBy { it }.map { it.key to it.value.size }.joinToString().also(::println) + return "OK" +} 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 c0cead7105d..51d79aae138 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 @@ -27199,6 +27199,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @Test + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/involvesIrInterpreter/intrinsicConst") @TestDataPath("$PROJECT_ROOT") 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 15d2a45863f..9ca8a1719ac 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 @@ -28333,6 +28333,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @Test + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @Test @TestMetadata("kt57313.kt") public void testKt57313() 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 b557c937368..ff323fe1dce 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 @@ -28333,6 +28333,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @Test + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @Test @TestMetadata("kt57313.kt") public void testKt57313() 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 1be2f1c8190..42ec02ad685 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -22952,6 +22952,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt56215.kt"); } + @TestMetadata("kt57028.kt") + public void testKt57028() throws Exception { + runTest("compiler/testData/codegen/box/involvesIrInterpreter/kt57028.kt"); + } + @TestMetadata("compiler/testData/codegen/box/involvesIrInterpreter/intrinsicConst") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)