[FIR2IR] Unconditionally disable linkViaSignatures on JVM

It was an experimental compilation mode that we don't need anymore.

KT-64809
This commit is contained in:
Sergej Jaskiewicz
2024-01-15 17:33:06 +01:00
committed by Space Team
parent 7568ee5a79
commit e8aa05928d
17 changed files with 88 additions and 43 deletions
@@ -785,7 +785,9 @@ See KT-45671 for more details."""
@Argument(
value = "-Xlink-via-signatures",
description = """Link JVM IR symbols via signatures instead of descriptors.
This mode is slower, but it can be useful for troubleshooting problems with the JVM IR backend."""
This mode is slower, but it can be useful for troubleshooting problems with the JVM IR backend.
This option is deprecated and will be deleted in future versions.
It has no effect when -language-version is 2.0 or higher."""
)
var linkViaSignatures = false
set(value) {
@@ -155,7 +155,7 @@ public class JVMConfigurationKeys {
CompilerConfigurationKey.create("Validate generated JVM bytecode");
public static final CompilerConfigurationKey<Boolean> LINK_VIA_SIGNATURES =
CompilerConfigurationKey.create("Link JVM IR symbols via signatures, instead of by descriptors");
CompilerConfigurationKey.create("Link JVM IR symbols via signatures, instead of by descriptors on the K1 frontend");
public static final CompilerConfigurationKey<Boolean> ENABLE_DEBUG_MODE =
CompilerConfigurationKey.create("Enable debug mode");
@@ -56,7 +56,7 @@ class Fir2IrConfiguration private constructor(
Fir2IrConfiguration(
languageVersionSettings = compilerConfiguration.languageVersionSettings,
diagnosticReporter = diagnosticReporter,
linkViaSignatures = compilerConfiguration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES),
linkViaSignatures = false,
evaluatedConstTracker = compilerConfiguration.putIfAbsent(
CommonConfigurationKeys.EVALUATED_CONST_TRACKER,
EvaluatedConstTracker.create(),
@@ -99,7 +99,7 @@ object LanguageSettingsDirectives : SimpleDirectivesContainer() {
val USE_TYPE_TABLE by directive("Use type table in metadata serialization")
val NO_NEW_JAVA_ANNOTATION_TARGETS by directive("Do not generate Java annotation targets TYPE_USE/TYPE_PARAMETER for Kotlin annotation classes with Kotlin targets TYPE/TYPE_PARAMETER")
val OLD_INNER_CLASSES_LOGIC by directive("Use old logic for generation of InnerClasses attributes")
val LINK_VIA_SIGNATURES by directive("Use linkage via signatures instead of descriptors / FIR")
val LINK_VIA_SIGNATURES_K1 by directive("Use linkage via signatures instead of descriptors on the K1 frontend")
val ENABLE_JVM_IR_INLINER by directive("Enable inlining on IR, instead of inlining on bytecode")
val GENERATE_PROPERTY_ANNOTATIONS_METHODS by directive(
description = "Enables corresponding analysis flag (JvmAnalysisFlags.generatePropertyAnnotationsMethods)"
+2
View File
@@ -83,6 +83,8 @@ where advanced options include:
-Xlambdas=class Generate lambdas as explicit classes.
-Xlink-via-signatures Link JVM IR symbols via signatures instead of descriptors.
This mode is slower, but it can be useful for troubleshooting problems with the JVM IR backend.
This option is deprecated and will be deleted in future versions.
It has no effect when -language-version is 2.0 or higher.
-Xno-call-assertions Don't generate not-null assertions for arguments of platform types.
-Xno-kotlin-nothing-value-exception
Don't use KotlinNothingValueException, which has been available since 1.4.
@@ -1,5 +1,5 @@
// WITH_STDLIB
// LINK_VIA_SIGNATURES
// LINK_VIA_SIGNATURES_K1
// DUMP_SIGNATURES
// MODULE: maven
+1 -1
View File
@@ -1,6 +1,6 @@
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// LINK_VIA_SIGNATURES
// LINK_VIA_SIGNATURES_K1
class Class
interface Interface
@@ -0,0 +1,41 @@
// FILE: a.kt
// CHECK JVM_IR:
// Mangled name: #main(){}
// Mangled name for the signature by IR: main(){}
// Mangled name for the signature by Frontend: main(){}%a.kt
// Public signature: /main|-4284757841571462650[0]
// Public signature debug description: main(){}
fun main(): Unit
// FILE: b.kt
// CHECK JVM_IR:
// Mangled name: #main(){}
// Mangled name for the signature by IR: main(){}
// Mangled name for the signature by Frontend: main(){}%b.kt
// Public signature: /main|-4284757841571462650[0]
// Public signature debug description: main(){}
fun main(): Unit
// FILE: c.kt
package foo
// CHECK JVM_IR:
// Mangled name: foo#main(){}
// Mangled name for the signature by IR: main(){}
// Mangled name for the signature by Frontend: main(){}%c.kt
// Public signature: foo/main|-4284757841571462650[0]
// Public signature debug description: main(){}
fun main(): Unit
// FILE: d.kt
package foo
// CHECK JVM_IR:
// Mangled name: foo#main(){}
// Mangled name for the signature by IR: main(){}
// Mangled name for the signature by Frontend: main(){}%d.kt
// Public signature: foo/main|-4284757841571462650[0]
// Public signature debug description: main(){}
fun main(): Unit
@@ -4,6 +4,9 @@
// FIR_IDENTICAL
// WITH_STDLIB
// SEPARATE_SIGNATURE_DUMP_FOR_K2
// ^ The main function has a different mangled name when it's computed from its K1 descriptor in K/JVM.
// FILE: a.kt
fun main() {
println("main() in a.kt")
@@ -6,12 +6,6 @@
// WITH_STDLIB
// SKIP_KLIB_TEST
// IGNORE_BACKEND_K2: JVM_IR
// ^^^ The IrErrorCallExpression inside the body of test1() function is dumped in a different way on JVM K1 and JVM K2.
// That is because `IrErrorCallExpression.description` includes a signature of a local lambda, which is mangled
// differently on K1 and K2. This is not a problem since signatures for local entities do not participate in IR-linkage.
// But the test needs to be muted.
inline fun foo(block: () -> Unit) { block() }
inline fun bar(block1: () -> Unit, noinline block2: () -> Unit) {
@@ -36,10 +36,8 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
// Mangled name: MyMap#computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Mangled name for the signature by IR: computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Mangled name for the signature by Frontend: computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1{EnhancedNullability},out|1:1?>{EnhancedNullability}){}1:1?
// Public signature by IR: /MyMap.computeIfPresent|-2673672788318360066[0]
// Public signature by IR debug description: computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Public signature by Frontend: /MyMap.computeIfPresent|-4313180944690406140[0]
// Public signature by Frontend debug description: computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1{EnhancedNullability},out|1:1?>{EnhancedNullability}){}1:1?
// Public signature: /MyMap.computeIfPresent|-2673672788318360066[0]
// Public signature debug description: computeIfPresent(1:0{EnhancedNullability};java.util.function.BiFunction<in|1:0{EnhancedNullability},in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
/* fake */ override fun computeIfPresent(p0: @EnhancedNullability K, p1: @EnhancedNullability BiFunction<in @EnhancedNullability K, in V, out V?>): V?
// CHECK JVM_IR:
@@ -88,20 +86,16 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
// Mangled name: MyMap#merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1,in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Mangled name for the signature by IR: merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1,in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Mangled name for the signature by Frontend: merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1{EnhancedNullability},in|1:1{EnhancedNullability},out|1:1?>{EnhancedNullability}){}1:1?
// Public signature by IR: /MyMap.merge|5136195963180492586[0]
// Public signature by IR debug description: merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1,in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
// Public signature by Frontend: /MyMap.merge|-7730033017111273031[0]
// Public signature by Frontend debug description: merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1{EnhancedNullability},in|1:1{EnhancedNullability},out|1:1?>{EnhancedNullability}){}1:1?
// Public signature: /MyMap.merge|5136195963180492586[0]
// Public signature debug description: merge(1:0{EnhancedNullability};1:1{EnhancedNullability};java.util.function.BiFunction<in|1:1,in|1:1,out|1:1?>{EnhancedNullability}){}1:1?
/* fake */ override fun merge(p0: @EnhancedNullability K, p1: @EnhancedNullability (V & Any), p2: @EnhancedNullability BiFunction<in V, in V, out V?>): V?
// CHECK:
// Mangled name: MyMap#putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
// Mangled name for the signature by IR: putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
// Mangled name for the signature by Frontend: putAll(kotlin.collections.Map<out|1:0?,out|1:1?>{EnhancedNullability}){}
// Public signature by IR: /MyMap.putAll|8252374948943605914[0]
// Public signature by IR debug description: putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
// Public signature by Frontend: /MyMap.putAll|2145725647041437129[0]
// Public signature by Frontend debug description: putAll(kotlin.collections.Map<out|1:0?,out|1:1?>{EnhancedNullability}){}
// Public signature: /MyMap.putAll|8252374948943605914[0]
// Public signature debug description: putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
/* fake */ override fun putAll(p0: @EnhancedNullability Map<out K?, V?>): Unit
// CHECK JVM_IR:
@@ -0,0 +1,17 @@
// CHECK:
// Mangled name: #consumeVarargs(kotlin.IntArray...){}
// Public signature: /consumeVarargs|2702777436513705083[0]
// Public signature debug description: consumeVarargs(kotlin.IntArray...){}
fun consumeVarargs(vararg arr: Int): Unit
// CHECK JVM_IR:
// Mangled name: #main(){}
// Mangled name for the signature by IR: main(){}
// Mangled name for the signature by Frontend: main(){}%IntArrayAsVararg.kt
// Public signature: /main|-4284757841571462650[0]
// Public signature debug description: main(){}
// CHECK JS_IR NATIVE:
// Mangled name: #main(){}
// Public signature: /main|-4284757841571462650[0]
// Public signature debug description: main(){}
fun main(): Unit
@@ -2,6 +2,9 @@
// WITH_STDLIB
// ISSUE: KT-60312
// SEPARATE_SIGNATURE_DUMP_FOR_K2
// ^ The main function has a different mangled name when it's computed from its K1 descriptor in K/JVM.
fun main() {
consumeVarargs(1, 2)
consumeVarargs(arr = intArrayOf(41, 42))
@@ -11,24 +11,15 @@ import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.backend.Fir2IrCommonMemberStorage
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
import org.jetbrains.kotlin.fir.backend.jvm.*
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize
import org.jetbrains.kotlin.fir.pipeline.signatureComposerForJvmFir2Ir
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.CompilerEnvironment
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.model.BackendKinds
@@ -77,9 +68,7 @@ class Fir2IrJvmResultsConverter(
val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG)
val generateSignatures = compilerConfigurationProvider.getCompilerConfiguration(module)
.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
val commonMemberStorage = Fir2IrCommonMemberStorage(signatureComposerForJvmFir2Ir(generateSignatures), FirJvmKotlinMangler())
val commonMemberStorage = Fir2IrCommonMemberStorage(signatureComposerForJvmFir2Ir(false), FirJvmKotlinMangler())
val diagnosticReporter = DiagnosticReporterFactory.createReporter()
val compilerConfiguration = compilerConfigurationProvider.getCompilerConfiguration(module)
@@ -89,7 +78,7 @@ class Fir2IrJvmResultsConverter(
fir2IrExtensions,
fir2IrConfiguration,
module.irGenerationExtensions(testServices),
signatureComposerForJvmFir2Ir(generateSignatures),
signatureComposerForJvmFir2Ir(false),
irMangler,
FirJvmKotlinMangler(),
FirJvmVisibilityConverter,
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_BACKEND
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_BACKEND_MULTI_MODULE
import org.jetbrains.kotlin.test.FirParser
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.SERIALIZE_IR
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES_K1
import org.jetbrains.kotlin.test.directives.configureFirParser
import org.jetbrains.kotlin.test.directives.model.ValueDirective
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter
@@ -91,7 +91,7 @@ open class AbstractIrCompileKotlinAgainstInlineKotlinTest :
private fun TestConfigurationBuilder.configureForSerialization() {
defaultDirectives {
SERIALIZE_IR.with(JvmSerializeIrMode.INLINE)
+LINK_VIA_SIGNATURES
+LINK_VIA_SIGNATURES_K1
}
configureIrHandlersStep {
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_SIGNATURE
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_ONLY_EXPLICITLY_DEFINED_DEBUG_INFO
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES_K1
import org.jetbrains.kotlin.test.directives.configureFirParser
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
@@ -55,7 +55,7 @@ abstract class AbstractIrTextTest<FrontendOutput : ResultingArtifact.FrontendOut
+DUMP_IR
+DUMP_KT_IR
+DUMP_SIGNATURES
+LINK_VIA_SIGNATURES
+LINK_VIA_SIGNATURES_K1
+REPORT_ONLY_EXPLICITLY_DEFINED_DEBUG_INFO
DIAGNOSTICS with "-warnings"
}
@@ -44,7 +44,7 @@ import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.EMIT_JVM_
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.ENABLE_JVM_IR_INLINER
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.ENABLE_JVM_PREVIEW
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.JDK_RELEASE
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.LINK_VIA_SIGNATURES_K1
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.NO_NEW_JAVA_ANNOTATION_TARGETS
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.NO_OPTIMIZED_CALLABLE_REFERENCES
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.NO_UNIFIED_NULL_CHECKS
@@ -178,7 +178,7 @@ open class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentC
register(ENABLE_DEBUG_MODE, JVMConfigurationKeys.ENABLE_DEBUG_MODE)
register(NO_NEW_JAVA_ANNOTATION_TARGETS, JVMConfigurationKeys.NO_NEW_JAVA_ANNOTATION_TARGETS)
register(OLD_INNER_CLASSES_LOGIC, JVMConfigurationKeys.OLD_INNER_CLASSES_LOGIC)
register(LINK_VIA_SIGNATURES, JVMConfigurationKeys.LINK_VIA_SIGNATURES)
register(LINK_VIA_SIGNATURES_K1, JVMConfigurationKeys.LINK_VIA_SIGNATURES)
register(ENABLE_JVM_IR_INLINER, JVMConfigurationKeys.ENABLE_IR_INLINER)
}