[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:
Kirill Rakhman
2023-06-16 16:14:41 +02:00
committed by Space Team
parent 66bdb9ce79
commit aa4ebe1991
5 changed files with 49 additions and 2 deletions
@@ -72,14 +72,16 @@ class Fir2IrClassifierStorage(
fun preCacheBuiltinClasses() {
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
classCache[firClass] = irClass
processClassHeader(firClass, irClass)
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
}
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 irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner
classCache[firClass] = irClass
@@ -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
@DisplayName("Native metadata of intermediate with reference to internal in common. KT-58219")
fun nativeMetadataOfIntermediateWithReferenceToInternalInCommon(gradleVersion: GradleVersion) {
@@ -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"))
}
}
}
}