From 1864716c8378b46d61e74b262b17f04264444223 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 2 Sep 2021 02:09:18 +0200 Subject: [PATCH] Remove -Xnormalize-constructor-calls Constructor call normalization is enabled by default since 1.3. --- .../kotlin/codegen/FunctionCodegen.java | 1 - .../codegen/coroutines/CoroutineCodegen.kt | 3 -- .../CoroutineTransformerMethodVisitor.kt | 8 ++-- .../SuspendFunctionGenerationStrategy.kt | 3 -- .../coroutines/processUninitializedStores.kt | 22 +--------- .../inline/coroutines/CoroutineTransformer.kt | 2 - .../optimization/OptimizationMethodVisitor.kt | 6 +-- .../UninitializedStoresMethodTransformer.kt | 34 --------------- .../kotlin/codegen/state/GenerationState.kt | 8 ---- .../arguments/K2JVMCompilerArguments.kt | 17 +++----- .../jetbrains/kotlin/cli/jvm/jvmArguments.kt | 13 ------ .../kotlin/config/JVMConfigurationKeys.java | 2 - .../JVMConstructorCallNormalizationMode.kt | 38 ----------------- .../FirBlackBoxCodegenTestGenerated.java | 42 ++++++------------- .../backend/jvm/codegen/CoroutineCodegen.kt | 6 ++- compiler/testData/cli/jvm/extraHelp.out | 4 -- .../breakInConstructorArguments.kt | 5 +-- .../continueInConstructorArguments.kt | 5 +-- .../earlyReturnInConstructorArguments.kt | 3 +- ...ation.kt => inlineFunInConstructorCall.kt} | 1 - ...lineFunInConstructorCallEvaluationOrder.kt | 3 +- ...onstructorCallWithDisabledNormalization.kt | 41 ------------------ ...nConstructorCallWithStrictNormalization.kt | 41 ------------------ .../inlineFunInInnerClassConstructorCall.kt | 5 +-- .../inlineFunInLocalClassConstructorCall.kt | 3 +- ...ledNormalization.kt => loopInInlineFun.kt} | 1 - ... loopInInlineFunInSuperConstructorCall.kt} | 3 +- ...ConstructorCallWithEnabledNormalization.kt | 14 ------- .../nonLocalReturnInConstructorArguments.kt | 5 +-- ...ryCatchInConstructorCallEvaluationOrder.kt | 3 +- .../codegen/BlackBoxCodegenTestGenerated.java | 42 ++++++------------- .../IrBlackBoxCodegenTestGenerated.java | 42 ++++++------------- .../JvmEnvironmentConfigurationDirectives.kt | 11 ++--- .../JvmEnvironmentConfigurator.kt | 2 - .../kotlin/test/AnalysisFlagExtractor.kt | 7 ---- .../LightAnalysisModeTestGenerated.java | 37 +++++----------- 36 files changed, 83 insertions(+), 400 deletions(-) delete mode 100644 compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/UninitializedStoresMethodTransformer.kt delete mode 100644 compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConstructorCallNormalizationMode.kt rename compiler/testData/codegen/box/constructorCall/{inlineFunInConstructorCallWithEnabledNormalization.kt => inlineFunInConstructorCall.kt} (93%) delete mode 100644 compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallWithDisabledNormalization.kt delete mode 100644 compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallWithStrictNormalization.kt rename compiler/testData/codegen/box/constructorCall/{loopInInlineFunWithEnabledNormalization.kt => loopInInlineFun.kt} (94%) rename compiler/testData/codegen/box/constructorCall/{loopInInlineFunInSuperConstructorCallWithEnabledNormalizationSince13.kt => loopInInlineFunInSuperConstructorCall.kt} (86%) delete mode 100644 compiler/testData/codegen/box/constructorCall/loopInInlineFunInSuperConstructorCallWithEnabledNormalization.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 40ee8d3f296..77b227712f2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -127,7 +127,6 @@ public class FunctionCodegen { CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(functionDescriptor), function, v.getThisName(), - state.getConstructorCallNormalizationMode(), this ); } else { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index 121e7715d68..a5e0849ae01 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -160,8 +160,6 @@ class CoroutineCodegenForLambda private constructor( ) { private val builtIns = funDescriptor.builtIns - private val constructorCallNormalizationMode = outerExpressionCodegen.state.constructorCallNormalizationMode - private val erasedInvokeFunction by lazy { getErasedInvokeFunction(funDescriptor).createCustomCopy { setModality(Modality.FINAL) } } @@ -524,7 +522,6 @@ class CoroutineCodegenForLambda private constructor( containingClassInternalName = v.thisName, obtainClassBuilderForCoroutineState = { v }, isForNamedFunction = false, - shouldPreserveClassInitialization = constructorCallNormalizationMode.shouldPreserveClassInitialization, disableTailCallOptimizationForFunctionReturningUnit = false, reportSuspensionPointInsideMonitor = { reportSuspensionPointInsideMonitor(element, state, it) }, lineNumber = CodegenUtil.getLineNumberForElement(element, false) ?: 0, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt index 4976b4ef34b..be420cae41f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt @@ -12,7 +12,10 @@ import org.jetbrains.kotlin.codegen.optimization.fixStack.FixStackMethodTransfor import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.utils.sure -import org.jetbrains.org.objectweb.asm.* +import org.jetbrains.org.objectweb.asm.Label +import org.jetbrains.org.objectweb.asm.MethodVisitor +import org.jetbrains.org.objectweb.asm.Opcodes +import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import org.jetbrains.org.objectweb.asm.tree.* import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue @@ -43,7 +46,6 @@ class CoroutineTransformerMethodVisitor( private val containingClassInternalName: String, obtainClassBuilderForCoroutineState: () -> ClassBuilder, private val isForNamedFunction: Boolean, - private val shouldPreserveClassInitialization: Boolean, // Since tail-call optimization of functions with Unit return type relies on ability of call-site to recognize them, // in order to ignore return value and push Unit, when we cannot ensure this ability, for example, when the function overrides function, // returning Any, we need to disable tail-call optimization for these functions. @@ -121,7 +123,7 @@ class CoroutineTransformerMethodVisitor( // Actual max stack might be increased during the previous phases methodNode.updateMaxStack() - UninitializedStoresProcessor(methodNode, shouldPreserveClassInitialization).run() + UninitializedStoresProcessor(methodNode).run() val spilledToVariableMapping = spillVariables(suspensionPoints, methodNode) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt index ddf121aadf0..62eff70be58 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.codegen.inline.coroutines.FOR_INLINE_SUFFIX import org.jetbrains.kotlin.codegen.inline.preprocessSuspendMarkers import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.JVMConfigurationKeys -import org.jetbrains.kotlin.config.JVMConstructorCallNormalizationMode import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -37,7 +36,6 @@ class SuspendFunctionGenerationStrategy( private val originalSuspendDescriptor: FunctionDescriptor, private val declaration: KtFunction, private val containingClassInternalName: String, - private val constructorCallNormalizationMode: JVMConstructorCallNormalizationMode, private val functionCodegen: FunctionCodegen ) : FunctionGenerationStrategy.CodegenBased(state) { @@ -88,7 +86,6 @@ class SuspendFunctionGenerationStrategy( return CoroutineTransformerMethodVisitor( mv, access, name, desc, null, null, containingClassInternalName, this::classBuilderForCoroutineState, isForNamedFunction = true, - shouldPreserveClassInitialization = constructorCallNormalizationMode.shouldPreserveClassInitialization, disableTailCallOptimizationForFunctionReturningUnit = originalSuspendDescriptor.returnType?.isUnit() == true && originalSuspendDescriptor.overriddenDescriptors.isNotEmpty() && !originalSuspendDescriptor.allOverriddenFunctionsReturnUnit(), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/processUninitializedStores.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/processUninitializedStores.kt index 98226289685..6856f7b03b6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/processUninitializedStores.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/processUninitializedStores.kt @@ -72,10 +72,7 @@ import kotlin.math.max * - generate NEW/DUP * - restore constructor arguments */ -class UninitializedStoresProcessor( - private val methodNode: MethodNode, - private val shouldPreserveClassInitialization: Boolean -) { +class UninitializedStoresProcessor(private val methodNode: MethodNode) { // method is "special", because it will invoke from this class or from a base class for #0 // // method is "special", because for singleton objects is generated as: @@ -107,22 +104,7 @@ class UninitializedStoresProcessor( methodNode.instructions.run { removeAll(removableUsages) - - if (shouldPreserveClassInitialization) { - // Replace 'NEW C' instruction with "manual" initialization of class 'C': - // LDC [typeName for C] - // INVOKESTATIC java/lang/Class.forName (Ljava/lang/String;)Ljava/lang/Class; - // POP - val typeNameForClass = newInsn.desc.replace('/', '.') - insertBefore(newInsn, LdcInsnNode(typeNameForClass)) - insertBefore( - newInsn, - MethodInsnNode(Opcodes.INVOKESTATIC, "java/lang/Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;", false) - ) - set(newInsn, InsnNode(Opcodes.POP)) - } else { - remove(newInsn) - } + remove(newInsn) } val indexOfConstructorArgumentFromTopOfStack = Type.getArgumentTypes((insn as MethodInsnNode).desc).size diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt index 29f9620dc0c..4fcd2163a19 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt @@ -87,7 +87,6 @@ class CoroutineTransformer( containingClassInternalName = classBuilder.thisName, obtainClassBuilderForCoroutineState = { classBuilder }, isForNamedFunction = false, - shouldPreserveClassInitialization = state.constructorCallNormalizationMode.shouldPreserveClassInitialization, disableTailCallOptimizationForFunctionReturningUnit = false, reportSuspensionPointInsideMonitor = { sourceCompilerForInline.reportSuspensionPointInsideMonitor(it) }, // TODO: this linenumbers might not be correct and since they are used only for step-over, check them. @@ -121,7 +120,6 @@ class CoroutineTransformer( containingClassInternalName = classBuilder.thisName, obtainClassBuilderForCoroutineState = { (inliningContext as RegeneratedClassContext).continuationBuilders[continuationClassName]!! }, isForNamedFunction = true, - shouldPreserveClassInitialization = state.constructorCallNormalizationMode.shouldPreserveClassInitialization, disableTailCallOptimizationForFunctionReturningUnit = disableTailCallOptimization, reportSuspensionPointInsideMonitor = { sourceCompilerForInline.reportSuspensionPointInsideMonitor(it) }, lineNumber = inliningContext.callSiteInfo.lineNumber, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt index 6215c5ce9cb..b71a1d0e00d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.codegen.optimization import org.jetbrains.kotlin.codegen.TransformationMethodVisitor +import org.jetbrains.kotlin.codegen.coroutines.UninitializedStoresProcessor import org.jetbrains.kotlin.codegen.inline.InplaceArgumentsMethodTransformer import org.jetbrains.kotlin.codegen.optimization.boxing.PopBackwardPropagationTransformer import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantBoxingMethodTransformer @@ -38,9 +39,6 @@ class OptimizationMethodVisitor( signature: String?, exceptions: Array? ) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions) { - private val constructorCallNormalizationTransformer = - UninitializedStoresMethodTransformer(generationState.constructorCallNormalizationMode) - val normalizationMethodTransformer = CompositeMethodTransformer( InplaceArgumentsMethodTransformer(), FixStackWithLabelNormalizationMethodTransformer(), @@ -65,7 +63,7 @@ class OptimizationMethodVisitor( override fun performTransformations(methodNode: MethodNode) { normalizationMethodTransformer.transform("fake", methodNode) - constructorCallNormalizationTransformer.transform("fake", methodNode) + UninitializedStoresProcessor(methodNode).run() if (canBeOptimized(methodNode) && !generationState.disableOptimization) { optimizationTransformer.transform("fake", methodNode) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/UninitializedStoresMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/UninitializedStoresMethodTransformer.kt deleted file mode 100644 index 23e49e727dc..00000000000 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/UninitializedStoresMethodTransformer.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.codegen.optimization - -import org.jetbrains.kotlin.codegen.coroutines.UninitializedStoresProcessor -import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer -import org.jetbrains.kotlin.config.JVMConstructorCallNormalizationMode -import org.jetbrains.org.objectweb.asm.tree.MethodNode - -class UninitializedStoresMethodTransformer( - private val mode: JVMConstructorCallNormalizationMode -) : MethodTransformer() { - - override fun transform(internalClassName: String, methodNode: MethodNode) { - if (mode.isEnabled) { - UninitializedStoresProcessor(methodNode, mode.shouldPreserveClassInitialization).run() - } - } - -} \ No newline at end of file diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index 9aeab3aaecf..5b2f73c8b69 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -312,14 +312,6 @@ class GenerationState private constructor( val shouldInlineConstVals = languageVersionSettings.supportsFeature(LanguageFeature.InlineConstVals) - val constructorCallNormalizationMode = - configuration.get(JVMConfigurationKeys.CONSTRUCTOR_CALL_NORMALIZATION_MODE) ?: run { - if (languageVersionSettings.supportsFeature(LanguageFeature.NormalizeConstructorCalls)) - JVMConstructorCallNormalizationMode.ENABLE - else - JVMConstructorCallNormalizationMode.DISABLE - } - val jvmDefaultMode = languageVersionSettings.getFlag(JvmAnalysisFlags.jvmDefaultMode) val disableOptimization = configuration.get(JVMConfigurationKeys.DISABLE_OPTIMIZATION, false) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index ed8858aee9c..57ddada7f01 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -23,7 +23,8 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { value = "-classpath", shortName = "-cp", valueDescription = "", - description = "List of directories and JAR/ZIP archives to search for user class files") + description = "List of directories and JAR/ZIP archives to search for user class files" + ) var classpath: String? by NullableStringFreezableVar(null) @DeprecatedOption(removeAfter = "1.5", level = DeprecationLevel.ERROR) @@ -50,7 +51,10 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { @DeprecatedOption(removeAfter = "1.5", level = DeprecationLevel.ERROR) @GradleOption(DefaultValues.BooleanTrueDefault::class) - @Argument(value = "-no-stdlib", description = "Don't automatically include the Kotlin/JVM stdlib and Kotlin reflection into the classpath") + @Argument( + value = "-no-stdlib", + description = "Don't automatically include the Kotlin/JVM stdlib and Kotlin reflection into the classpath" + ) var noStdlib: Boolean by FreezableVar(false) @DeprecatedOption(removeAfter = "1.5", level = DeprecationLevel.ERROR) @@ -168,15 +172,6 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { @Argument(value = "-Xno-optimize", description = "Disable optimizations") var noOptimize: Boolean by FreezableVar(false) - @Argument( - value = "-Xnormalize-constructor-calls", - valueDescription = "{disable|enable}", - description = "Normalize constructor calls (disable: don't normalize; enable: normalize),\n" + - "default is 'disable' in language version 1.2 and below,\n" + - "'enable' since language version 1.3" - ) - var constructorCallNormalizationMode: String? by NullableStringFreezableVar(null) - @Argument( value = "-Xassertions", valueDescription = "{always-enable|always-disable|jvm|legacy}", description = "Assert calls behaviour\n" + diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt index ed3e113ffb2..0f380d0d7dd 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt @@ -264,19 +264,6 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr put(JVMConfigurationKeys.VALIDATE_IR, arguments.validateIr) put(JVMConfigurationKeys.VALIDATE_BYTECODE, arguments.validateBytecode) - if (!JVMConstructorCallNormalizationMode.isSupportedValue(arguments.constructorCallNormalizationMode)) { - messageCollector.report( - ERROR, - "Unknown constructor call normalization mode: ${arguments.constructorCallNormalizationMode}, " + - "supported modes: ${JVMConstructorCallNormalizationMode.values().map { it.description }}" - ) - } - - val constructorCallNormalizationMode = JVMConstructorCallNormalizationMode.fromStringOrNull(arguments.constructorCallNormalizationMode) - if (constructorCallNormalizationMode != null) { - put(JVMConfigurationKeys.CONSTRUCTOR_CALL_NORMALIZATION_MODE, constructorCallNormalizationMode) - } - val assertionsMode = JVMAssertionsMode.fromStringOrNull(arguments.assertionsMode) if (assertionsMode == null) { diff --git a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java index c4fbadfc13d..399fda8db82 100644 --- a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java +++ b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java @@ -54,8 +54,6 @@ public class JVMConfigurationKeys { CompilerConfigurationKey.create("disable not-null parameter assertions"); public static final CompilerConfigurationKey ASSERTIONS_MODE = CompilerConfigurationKey.create("assertions mode"); - public static final CompilerConfigurationKey CONSTRUCTOR_CALL_NORMALIZATION_MODE = - CompilerConfigurationKey.create("constructor call normalization mode"); public static final CompilerConfigurationKey NO_EXCEPTION_ON_EXPLICIT_EQUALS_FOR_BOXED_NULL = CompilerConfigurationKey.create("do not throw NPE on explicit 'equals' call for null receiver of platform boxed primitive type"); public static final CompilerConfigurationKey DISABLE_OPTIMIZATION = diff --git a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConstructorCallNormalizationMode.kt b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConstructorCallNormalizationMode.kt deleted file mode 100644 index d2b8b3176e8..00000000000 --- a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConstructorCallNormalizationMode.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.config - -enum class JVMConstructorCallNormalizationMode( - val description: String, - val isEnabled: Boolean, - val shouldPreserveClassInitialization: Boolean -) { - DISABLE("disable", false, false), - ENABLE("enable", true, false), - PRESERVE_CLASS_INITIALIZATION("preserve-class-initialization", true, true) - ; - - companion object { - @JvmStatic - fun isSupportedValue(string: String?) = - string == null || values().any { it.description == string } - - @JvmStatic - fun fromStringOrNull(string: String?) = - values().find { it.description == string } - } -} \ No newline at end of file diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 75eae1632f9..444835415ac 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -7608,30 +7608,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/constructorCall/earlyReturnInConstructorArguments.kt"); } + @Test + @TestMetadata("inlineFunInConstructorCall.kt") + public void testInlineFunInConstructorCall() throws Exception { + runTest("compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCall.kt"); + } + @Test @TestMetadata("inlineFunInConstructorCallEvaluationOrder.kt") public void testInlineFunInConstructorCallEvaluationOrder() throws Exception { runTest("compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallEvaluationOrder.kt"); } - @Test - @TestMetadata("inlineFunInConstructorCallWithDisabledNormalization.kt") - public void testInlineFunInConstructorCallWithDisabledNormalization() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallWithDisabledNormalization.kt"); - } - - @Test - @TestMetadata("inlineFunInConstructorCallWithEnabledNormalization.kt") - public void testInlineFunInConstructorCallWithEnabledNormalization() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallWithEnabledNormalization.kt"); - } - - @Test - @TestMetadata("inlineFunInConstructorCallWithStrictNormalization.kt") - public void testInlineFunInConstructorCallWithStrictNormalization() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/inlineFunInConstructorCallWithStrictNormalization.kt"); - } - @Test @TestMetadata("inlineFunInInnerClassConstructorCall.kt") public void testInlineFunInInnerClassConstructorCall() throws Exception { @@ -7645,21 +7633,15 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT } @Test - @TestMetadata("loopInInlineFunInSuperConstructorCallWithEnabledNormalization.kt") - public void testLoopInInlineFunInSuperConstructorCallWithEnabledNormalization() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/loopInInlineFunInSuperConstructorCallWithEnabledNormalization.kt"); + @TestMetadata("loopInInlineFun.kt") + public void testLoopInInlineFun() throws Exception { + runTest("compiler/testData/codegen/box/constructorCall/loopInInlineFun.kt"); } @Test - @TestMetadata("loopInInlineFunInSuperConstructorCallWithEnabledNormalizationSince13.kt") - public void testLoopInInlineFunInSuperConstructorCallWithEnabledNormalizationSince13() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/loopInInlineFunInSuperConstructorCallWithEnabledNormalizationSince13.kt"); - } - - @Test - @TestMetadata("loopInInlineFunWithEnabledNormalization.kt") - public void testLoopInInlineFunWithEnabledNormalization() throws Exception { - runTest("compiler/testData/codegen/box/constructorCall/loopInInlineFunWithEnabledNormalization.kt"); + @TestMetadata("loopInInlineFunInSuperConstructorCall.kt") + public void testLoopInInlineFunInSuperConstructorCall() throws Exception { + runTest("compiler/testData/codegen/box/constructorCall/loopInInlineFunInSuperConstructorCall.kt"); } @Test diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/CoroutineCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/CoroutineCodegen.kt index 2c0160a8f25..cc4e452c3b8 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/CoroutineCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/CoroutineCodegen.kt @@ -29,7 +29,10 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection -import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.file +import org.jetbrains.kotlin.ir.util.functions +import org.jetbrains.kotlin.ir.util.isSuspend +import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.types.Variance import org.jetbrains.org.objectweb.asm.MethodVisitor @@ -70,7 +73,6 @@ internal fun MethodNode.acceptWithStateMachine( containingClassInternalName = classCodegen.type.internalName, obtainClassBuilderForCoroutineState = obtainContinuationClassBuilder, isForNamedFunction = irFunction.isSuspend, - shouldPreserveClassInitialization = state.constructorCallNormalizationMode.shouldPreserveClassInitialization, disableTailCallOptimizationForFunctionReturningUnit = irFunction.isSuspend && irFunction.suspendFunctionOriginal().let { it.returnType.isUnit() && it.anyOfOverriddenFunctionsReturnsNonUnit() }, diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 713edb583af..e047e70bdcb 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -18,10 +18,6 @@ where advanced options include: default: legacy -Xbuild-file= Path to the .xml build file to compile -Xcompile-java Reuse javac analysis and compile Java source files - -Xnormalize-constructor-calls={disable|enable} - Normalize constructor calls (disable: don't normalize; enable: normalize), - default is 'disable' in language version 1.2 and below, - 'enable' since language version 1.3 -Xdump-declarations-to= Path to JSON file to dump Java to Kotlin declaration mappings -Xdefault-script-extension=