K2: add inline JVM target version checker

#KT-60777 Fixed
This commit is contained in:
Alexander Udalov
2024-02-28 15:55:34 +01:00
committed by Space Team
parent d475371394
commit 3bb2ea10b6
19 changed files with 260 additions and 16 deletions
@@ -4884,6 +4884,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token, token,
) )
} }
add(FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM) { firDiagnostic ->
InlineFromHigherPlatformImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic -> add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic ->
CannotAllUnderImportFromSingletonImpl( CannotAllUnderImportFromSingletonImpl(
firDiagnostic.a, firDiagnostic.a,
@@ -3401,6 +3401,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val type: KtType val type: KtType
} }
interface InlineFromHigherPlatform : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = InlineFromHigherPlatform::class
val inlinedBytecodeVersion: String
val currentModuleBytecodeVersion: String
}
interface CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective> { interface CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective> {
override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class
val objectName: Name val objectName: Name
@@ -4100,6 +4100,13 @@ internal class InefficientEqualsOverridingInValueClassImpl(
token: KtLifetimeToken, token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtNamedFunction>(firDiagnostic, token), KtFirDiagnostic.InefficientEqualsOverridingInValueClass ) : KtAbstractFirDiagnostic<KtNamedFunction>(firDiagnostic, token), KtFirDiagnostic.InefficientEqualsOverridingInValueClass
internal class InlineFromHigherPlatformImpl(
override val inlinedBytecodeVersion: String,
override val currentModuleBytecodeVersion: String,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.InlineFromHigherPlatform
internal class CannotAllUnderImportFromSingletonImpl( internal class CannotAllUnderImportFromSingletonImpl(
override val objectName: Name, override val objectName: Name,
firDiagnostic: KtPsiDiagnostic, firDiagnostic: KtPsiDiagnostic,
@@ -115,6 +115,7 @@ fun <F> prepareJvmSessions(
}, },
extensionRegistrars, extensionRegistrars,
configuration.languageVersionSettings, configuration.languageVersionSettings,
configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT),
configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER), configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER), configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER),
configuration.get(CommonConfigurationKeys.IMPORT_TRACKER), configuration.get(CommonConfigurationKeys.IMPORT_TRACKER),
@@ -193,6 +193,13 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
} }
} }
val INLINE by object : DiagnosticGroup("Inline") {
val INLINE_FROM_HIGHER_PLATFORM by error<PsiElement> {
parameter<String>("inlinedBytecodeVersion")
parameter<String>("currentModuleBytecodeVersion")
}
}
val MISC by object : DiagnosticGroup("Misc") { val MISC by object : DiagnosticGroup("Misc") {
val INAPPLICABLE_JVM_FIELD by error<KtAnnotationEntry> { val INAPPLICABLE_JVM_FIELD by error<KtAnnotationEntry> {
parameter<String>("message") parameter<String>("message")
@@ -127,6 +127,9 @@ object FirJvmErrors {
// Suspension Point // Suspension Point
val SUSPENSION_POINT_INSIDE_CRITICAL_SECTION: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<PsiElement, FirCallableSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val SUSPENSION_POINT_INSIDE_CRITICAL_SECTION: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<PsiElement, FirCallableSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
// Inline
val INLINE_FROM_HIGHER_PLATFORM: KtDiagnosticFactory2<String, String> by error2<PsiElement, String, String>()
// Misc // Misc
val INAPPLICABLE_JVM_FIELD: KtDiagnosticFactory1<String> by error1<KtAnnotationEntry, String>() val INAPPLICABLE_JVM_FIELD: KtDiagnosticFactory1<String> by error1<KtAnnotationEntry, String>()
val INAPPLICABLE_JVM_FIELD_WARNING: KtDiagnosticFactory1<String> by warning1<KtAnnotationEntry, String>() val INAPPLICABLE_JVM_FIELD_WARNING: KtDiagnosticFactory1<String> by warning1<KtAnnotationEntry, String>()
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.ILLEGAL_JV
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD_WARNING import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD_WARNING
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_NAME
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INNER_JVM_RECORD import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INNER_JVM_RECORD
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE
@@ -303,6 +304,12 @@ object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
"The ''{0}'' suspension point is inside a critical section.", "The ''{0}'' suspension point is inside a critical section.",
DECLARATION_NAME DECLARATION_NAME
) )
map.put(
INLINE_FROM_HIGHER_PLATFORM,
"Cannot inline bytecode built with {0} into bytecode that is being built with {1}. Please specify proper ''-jvm-target'' option.",
STRING,
STRING
)
map.put( map.put(
CONCURRENT_HASH_MAP_CONTAINS_OPERATOR, CONCURRENT_HASH_MAP_CONTAINS_OPERATOR,
"Method 'contains' from ConcurrentHashMap might have unexpected semantics: it calls 'containsValue' instead of 'containsKey'. " + "Method 'contains' from ConcurrentHashMap might have unexpected semantics: it calls 'containsValue' instead of 'containsKey'. " +
@@ -21,6 +21,7 @@ object JvmExpressionCheckers : ExpressionCheckers() {
FirJavaSamInterfaceConstructorReferenceChecker, FirJavaSamInterfaceConstructorReferenceChecker,
FirQualifiedAccessJavaNullabilityWarningChecker, FirQualifiedAccessJavaNullabilityWarningChecker,
FirJvmModuleAccessibilityQualifiedAccessChecker, FirJvmModuleAccessibilityQualifiedAccessChecker,
FirJvmInlineTargetQualifiedAccessChecker,
) )
override val propertyAccessExpressionCheckers: Set<FirPropertyAccessExpressionChecker> override val propertyAccessExpressionCheckers: Set<FirPropertyAccessExpressionChecker>
@@ -0,0 +1,85 @@
/*
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
import org.jetbrains.kotlin.fir.analysis.checkers.isLhsOfAssignment
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.toReference
import org.jetbrains.kotlin.fir.java.jvmTargetProvider
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
object FirJvmInlineTargetQualifiedAccessChecker : FirQualifiedAccessExpressionChecker(MppCheckerKind.Common) {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
val callableSymbol = expression.calleeReference.toResolvedCallableSymbol() ?: return
if (callableSymbol.origin.fromSource) return
val isInline = when (callableSymbol) {
is FirFunctionSymbol<*> -> callableSymbol.isInline
is FirPropertySymbol -> {
val accessor = if (expression.isLhsOfAssignment(context)) callableSymbol.setterSymbol else callableSymbol.getterSymbol
accessor != null && accessor.isInline
}
else -> false
}
if (isInline) {
checkInlineTargetVersion(callableSymbol, context, reporter, expression)
}
}
private fun checkInlineTargetVersion(
callableSymbol: FirCallableSymbol<*>,
context: CheckerContext,
reporter: DiagnosticReporter,
element: FirElement,
) {
val currentJvmTarget = context.session.jvmTargetProvider?.jvmTarget ?: return
val containingClass = callableSymbol.containingClassLookupTag()
val binaryClass = if (containingClass != null) {
val containingClassSymbol = containingClass.toFirRegularClassSymbol(context.session) ?: return
@OptIn(SymbolInternals::class)
val sourceElement = containingClassSymbol.fir.sourceElement as? KotlinJvmBinarySourceElement ?: return
sourceElement.binaryClass
} else {
val containerSource = callableSymbol.containerSource as? JvmPackagePartSource ?: return
containerSource.knownJvmBinaryClass
}
val inlinedVersion = (binaryClass as? FileBasedKotlinClass)?.classVersion ?: return
val currentVersion = currentJvmTarget.majorVersion
if (currentVersion < inlinedVersion) {
reporter.reportOn(
element.toReference(context.session)?.source ?: element.source,
FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM,
JvmTarget.getDescription(inlinedVersion),
JvmTarget.getDescription(currentVersion),
context,
)
}
}
}
@@ -561,6 +561,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
"INLINE_PROPERTY_WITH_BACKING_FIELD", "INLINE_PROPERTY_WITH_BACKING_FIELD",
"ILLEGAL_INLINE_PARAMETER_MODIFIER", "ILLEGAL_INLINE_PARAMETER_MODIFIER",
"INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED", "INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED",
"INLINE_FROM_HIGHER_PLATFORM",
"CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON", "CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON",
"PACKAGE_CANNOT_BE_IMPORTED", "PACKAGE_CANNOT_BE_IMPORTED",
"CANNOT_BE_IMPORTED", "CANNOT_BE_IMPORTED",
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.session package org.jetbrains.kotlin.fir.session
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.fir.SessionConfiguration
import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirJvmTargetProvider
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
@@ -88,6 +90,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
createIncrementalCompilationSymbolProviders: (FirSession) -> FirJvmIncrementalCompilationSymbolProviders?, createIncrementalCompilationSymbolProviders: (FirSession) -> FirJvmIncrementalCompilationSymbolProviders?,
extensionRegistrars: List<FirExtensionRegistrar>, extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
jvmTarget: JvmTarget,
lookupTracker: LookupTracker?, lookupTracker: LookupTracker?,
enumWhenTracker: EnumWhenTracker?, enumWhenTracker: EnumWhenTracker?,
importTracker: ImportTracker?, importTracker: ImportTracker?,
@@ -108,6 +111,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
registerExtraComponents = { registerExtraComponents = {
it.registerDefaultComponents() it.registerDefaultComponents()
it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
it.register(FirJvmTargetProvider::class, FirJvmTargetProvider(jvmTarget))
registerExtraComponents(it) registerExtraComponents(it)
}, },
registerExtraCheckers = { it.registerJvmCheckers() }, registerExtraCheckers = { it.registerJvmCheckers() },
@@ -79,6 +79,7 @@ object FirSessionFactoryHelper {
{ incrementalCompilationContext?.createSymbolProviders(it, mainModuleData, projectEnvironment) }, { incrementalCompilationContext?.createSymbolProviders(it, mainModuleData, projectEnvironment) },
extensionRegistrars, extensionRegistrars,
languageVersionSettings, languageVersionSettings,
JvmTarget.DEFAULT,
lookupTracker, lookupTracker,
enumWhenTracker, enumWhenTracker,
importTracker, importTracker,
@@ -0,0 +1,14 @@
/*
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
class FirJvmTargetProvider(val jvmTarget: JvmTarget) : FirSessionComponent
val FirSession.jvmTargetProvider: FirJvmTargetProvider? by FirSession.nullableSessionComponentAccessor()
@@ -17,7 +17,9 @@ var allInline: Int
inline get() = 1 inline get() = 1
inline set(varue) { varue.hashCode() } inline set(varue) { varue.hashCode() }
inline var inlineProperty: Int
get() = 1
set(varue) { varue.hashCode() }
open class Base { open class Base {
inline fun inlineFunBase(p: () -> Unit) { inline fun inlineFunBase(p: () -> Unit) {
@@ -35,4 +37,8 @@ open class Base {
var allInlineBase: Int var allInlineBase: Int
inline get() = 1 inline get() = 1
inline set(varue) { varue.hashCode() } inline set(varue) { varue.hashCode() }
}
inline var inlinePropertyBase: Int
get() = 1
set(varue) { varue.hashCode() }
}
@@ -0,0 +1,64 @@
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:6:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineFun {}
^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:7:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineGetter
^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:11:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineSetter = 1
^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:13:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
allInline
^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:14:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
allInline = 1
^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:16:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineProperty
^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineProperty = 1
^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:20:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.inlineFunBase {}
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:21:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.inlineGetterBase
^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.inlineSetterBase = 1
^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:27:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.allInlineBase
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:28:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.allInlineBase = 1
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:30:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.inlinePropertyBase
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:31:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
base.inlinePropertyBase = 1
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:38:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineFunBase {}
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineGetterBase
^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:43:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlineSetterBase = 1
^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:45:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
allInlineBase
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:46:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
allInlineBase = 1
^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:48:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlinePropertyBase
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:49:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
inlinePropertyBase = 1
^^^^^^^^^^^^^^^^^^
COMPILATION_ERROR
@@ -16,40 +16,58 @@ compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:14:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:14:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
allInline = 1 allInline = 1
^^^^^^^^^ ^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:16:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineProperty
^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineProperty = 1
^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:20:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlineFunBase {} base.inlineFunBase {}
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:18:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:21:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlineGetterBase base.inlineGetterBase
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:19:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:22:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlineGetterBase = 1 base.inlineGetterBase = 1
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:22:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlineSetterBase = 1 base.inlineSetterBase = 1
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:24:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:27:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.allInlineBase base.allInlineBase
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:28:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.allInlineBase = 1 base.allInlineBase = 1
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:32:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:30:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlinePropertyBase
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:31:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
base.inlinePropertyBase = 1
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:38:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineFunBase {} inlineFunBase {}
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:33:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineGetterBase inlineGetterBase
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:34:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:40:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineGetterBase = 1 inlineGetterBase = 1
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:37:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:43:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlineSetterBase = 1 inlineSetterBase = 1
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:45:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
allInlineBase allInlineBase
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:40:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:46:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
allInlineBase = 1 allInlineBase = 1
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:48:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlinePropertyBase
^^^^^^^^^^^^^^^^^^
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:49:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
inlinePropertyBase = 1
^^^^^^^^^^^^^^^^^^
COMPILATION_ERROR COMPILATION_ERROR
@@ -13,6 +13,9 @@ fun baz() {
allInline allInline
allInline = 1 allInline = 1
inlineProperty
inlineProperty = 1
val base = Base() val base = Base()
base.inlineFunBase {} base.inlineFunBase {}
base.inlineGetterBase base.inlineGetterBase
@@ -23,6 +26,9 @@ fun baz() {
base.allInlineBase base.allInlineBase
base.allInlineBase = 1 base.allInlineBase = 1
base.inlinePropertyBase
base.inlinePropertyBase = 1
} }
@@ -38,5 +44,8 @@ class Derived : Base() {
allInlineBase allInlineBase
allInlineBase = 1 allInlineBase = 1
inlinePropertyBase
inlinePropertyBase = 1
} }
} }
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.container.topologicalSort import org.jetbrains.kotlin.container.topologicalSort
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
@@ -367,6 +368,8 @@ open class FirFrontendFacade(
createIncrementalCompilationSymbolProviders = { null }, createIncrementalCompilationSymbolProviders = { null },
extensionRegistrars, extensionRegistrars,
languageVersionSettings, languageVersionSettings,
jvmTarget = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT),
lookupTracker = null, lookupTracker = null,
enumWhenTracker = null, enumWhenTracker = null,
importTracker = null, importTracker = null,
@@ -491,8 +491,7 @@ abstract class AbstractCompileKotlinAgainstCustomBinariesTest : AbstractKotlinCo
compileKotlin("source.kt", tmpdir, listOf(library1)) compileKotlin("source.kt", tmpdir, listOf(library1))
} }
// KT-60777 K2: missing INLINE_FROM_HIGHER_PLATFORM fun testWrongInlineTarget() {
fun testWrongInlineTarget() = muteForK2 {
val library = compileLibrary("library", additionalOptions = listOf("-jvm-target", "11")) val library = compileLibrary("library", additionalOptions = listOf("-jvm-target", "11"))
compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-jvm-target", "1.8")) compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-jvm-target", "1.8"))