[FIR2IR] Fix NPE on missing built-ins when using old stdlib
Specifically, this code was throwing when trying to get the symbol for IntrinsicConstEvaluation which is only available since 1.7. #KT-59151 Fixed
This commit is contained in:
committed by
Space Team
parent
66bdb9ce79
commit
aa4ebe1991
@@ -72,14 +72,16 @@ class Fir2IrClassifierStorage(
|
|||||||
|
|
||||||
fun preCacheBuiltinClasses() {
|
fun preCacheBuiltinClasses() {
|
||||||
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
|
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
|
||||||
val firClass = classId.toSymbol(session)!!.fir as FirRegularClass
|
// toSymbol() can return null when using an old stdlib that's missing some types
|
||||||
|
val firClass = classId.toSymbol(session)?.fir as FirRegularClass? ?: continue
|
||||||
val irClass = irBuiltinSymbol.owner
|
val irClass = irBuiltinSymbol.owner
|
||||||
classCache[firClass] = irClass
|
classCache[firClass] = irClass
|
||||||
processClassHeader(firClass, irClass)
|
processClassHeader(firClass, irClass)
|
||||||
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
|
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
|
||||||
}
|
}
|
||||||
for ((primitiveClassId, primitiveArrayId) in StandardClassIds.primitiveArrayTypeByElementType) {
|
for ((primitiveClassId, primitiveArrayId) in StandardClassIds.primitiveArrayTypeByElementType) {
|
||||||
val firClass = primitiveArrayId.toLookupTag().toSymbol(session)!!.fir as FirRegularClass
|
// toSymbol() can return null when using an old stdlib that's missing some types
|
||||||
|
val firClass = primitiveArrayId.toLookupTag().toSymbol(session)?.fir as FirRegularClass? ?: continue
|
||||||
val irType = typeConverter.classIdToTypeMap[primitiveClassId]
|
val irType = typeConverter.classIdToTypeMap[primitiveClassId]
|
||||||
val irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner
|
val irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner
|
||||||
classCache[firClass] = irClass
|
classCache[firClass] = irClass
|
||||||
|
|||||||
+11
@@ -63,6 +63,17 @@ class CustomK2Tests : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@DisplayName("HMPP compilation with JS target and old stdlib. KT-59151")
|
||||||
|
fun testHmppCompilationWithJsAndOldStdlib(gradleVersion: GradleVersion) {
|
||||||
|
with(project("k2-mpp-js-old-stdlib", gradleVersion, buildOptions = defaultBuildOptions.copy(languageVersion = "2.0"))) {
|
||||||
|
val taskToExecute = ":compileKotlinJs"
|
||||||
|
build(taskToExecute) {
|
||||||
|
assertTasksExecuted(taskToExecute)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@GradleTest
|
@GradleTest
|
||||||
@DisplayName("Native metadata of intermediate with reference to internal in common. KT-58219")
|
@DisplayName("Native metadata of intermediate with reference to internal in common. KT-58219")
|
||||||
fun nativeMetadataOfIntermediateWithReferenceToInternalInCommon(gradleVersion: GradleVersion) {
|
fun nativeMetadataOfIntermediateWithReferenceToInternalInCommon(gradleVersion: GradleVersion) {
|
||||||
|
|||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
js {
|
||||||
|
nodejs()
|
||||||
|
browser()
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("stdlib-common", "1.6.21"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("stdlib-js", "1.6.21"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
kotlin.stdlib.default.dependency=false
|
||||||
Reference in New Issue
Block a user