Skip to content

Commit aa4ebe1

Browse files
cypressiousSpace Team
authored and
Space Team
committed
[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
1 parent 66bdb9c commit aa4ebe1

File tree

5 files changed

+49
-2
lines changed

5 files changed

+49
-2
lines changed

compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,16 @@ class Fir2IrClassifierStorage(
7272

7373
fun preCacheBuiltinClasses() {
7474
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
75-
val firClass = classId.toSymbol(session)!!.fir as FirRegularClass
75+
// toSymbol() can return null when using an old stdlib that's missing some types
76+
val firClass = classId.toSymbol(session)?.fir as FirRegularClass? ?: continue
7677
val irClass = irBuiltinSymbol.owner
7778
classCache[firClass] = irClass
7879
processClassHeader(firClass, irClass)
7980
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
8081
}
8182
for ((primitiveClassId, primitiveArrayId) in StandardClassIds.primitiveArrayTypeByElementType) {
82-
val firClass = primitiveArrayId.toLookupTag().toSymbol(session)!!.fir as FirRegularClass
83+
// toSymbol() can return null when using an old stdlib that's missing some types
84+
val firClass = primitiveArrayId.toLookupTag().toSymbol(session)?.fir as FirRegularClass? ?: continue
8385
val irType = typeConverter.classIdToTypeMap[primitiveClassId]
8486
val irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner
8587
classCache[firClass] = irClass

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ class CustomK2Tests : KGPBaseTest() {
6363
}
6464
}
6565

66+
@GradleTest
67+
@DisplayName("HMPP compilation with JS target and old stdlib. KT-59151")
68+
fun testHmppCompilationWithJsAndOldStdlib(gradleVersion: GradleVersion) {
69+
with(project("k2-mpp-js-old-stdlib", gradleVersion, buildOptions = defaultBuildOptions.copy(languageVersion = "2.0"))) {
70+
val taskToExecute = ":compileKotlinJs"
71+
build(taskToExecute) {
72+
assertTasksExecuted(taskToExecute)
73+
}
74+
}
75+
}
76+
6677
@GradleTest
6778
@DisplayName("Native metadata of intermediate with reference to internal in common. KT-58219")
6879
fun nativeMetadataOfIntermediateWithReferenceToInternalInCommon(gradleVersion: GradleVersion) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
2+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
3+
4+
plugins {
5+
kotlin("multiplatform")
6+
}
7+
8+
repositories {
9+
mavenLocal()
10+
mavenCentral()
11+
}
12+
13+
kotlin {
14+
js {
15+
nodejs()
16+
browser()
17+
}
18+
19+
sourceSets {
20+
val commonMain by getting {
21+
dependencies {
22+
implementation(kotlin("stdlib-common", "1.6.21"))
23+
}
24+
}
25+
26+
val jsMain by getting {
27+
dependencies {
28+
implementation(kotlin("stdlib-js", "1.6.21"))
29+
}
30+
}
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
kotlin.stdlib.default.dependency=false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fun main() {}

0 commit comments

Comments
 (0)